private IEnvelope ClassEnvelope(IClass Class, ISpatialReference sRef)
        {
            IEnvelope         envelope  = null;
            ISpatialReference classSRef = null;

            if (Class is IFeatureClass)
            {
                envelope  = ((IFeatureClass)Class).Envelope;
                classSRef = ((IFeatureClass)Class).SpatialReference;
            }
            else if (Class is IRasterClass && ((IRasterClass)Class).Polygon != null)
            {
                envelope  = ((IRasterClass)Class).Polygon.Envelope;
                classSRef = ((IRasterClass)Class).SpatialReference;
            }

            if (envelope != null && classSRef != null && sRef != null && !sRef.Equals(classSRef))
            {
                IGeometry geom = GeometricTransformer.Transform2D(envelope, classSRef, sRef);
                if (geom == null)
                {
                    return(null);
                }

                envelope = geom.Envelope;
            }
            return(envelope);
        }
Exemple #2
0
        public float GridQuery(gView.Framework.Carto.IDisplay display, IPoint point, ISpatialReference sRef)
        {
            float floatNodata = (float)_nodata;

            TFWFile tfw = this.WorldFile as TFWFile;

            if (tfw == null)
            {
                return(floatNodata);
            }

            if (this.SpatialReference != null && sRef != null &&
                !sRef.Equals(this.SpatialReference))
            {
                point = GeometricTransformerFactory.Transform2D(point, sRef, this.SpatialReference) as IPoint;
            }
            if (point == null)
            {
                return(floatNodata);
            }

            // Punkt transformieren -> Bild
            vector2[] vecs = new vector2[1];
            vecs[0] = new vector2(point.X, point.Y);

            if (!tfw.ProjectInv(vecs))
            {
                return(floatNodata);
            }

            if (vecs[0].x < 0 || vecs[0].x >= _iWidth ||
                vecs[0].y < 0 || vecs[0].y >= _iHeight)
            {
                return(floatNodata);
            }

            unsafe
            {
                fixed(float *buf = new float[2])
                {
                    _gridQueryBand.ReadRaster((int)vecs[0].x, (int)vecs[0].y, 1, 1,
                                              (IntPtr)buf,
                                              1, 1, OSGeo_v1.GDAL.DataType.GDT_CFloat32, 4, 0);

                    if ((_hasNoDataVal != 0 && buf[0] == floatNodata) ||
                        (_useIgnoreValue && buf[0] == _ignoreValue))
                    {
                        return(floatNodata);
                    }

                    return(buf[0]);
                }
            }
        }
Exemple #3
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (_map == null || _display == null)
            {
                return;
            }

            try
            {
                _map.Name         = txtName.Text;
                _display.refScale = Convert.ToDouble(numRefScale.Value);

                if (cmbMapUnits.Enabled)
                {
                    _display.MapUnits = ((GeoUnitsItem)cmbMapUnits.SelectedItem).Unit;
                }
                _display.DisplayUnits = ((GeoUnitsItem)cmbDisplayUnits.SelectedItem).Unit;

                _display.BackgroundColor = btnBackgroundColor.BackColor;

                ISpatialReference oldSRef = _display.SpatialReference;
                _display.SpatialReference = _sr.SpatialReference;

                if (oldSRef != null &&
                    !oldSRef.Equals(_display.SpatialReference))
                {
                    IEnvelope limit = _display.Limit;
                    IEnvelope env   = _display.Envelope;

                    _display.Limit = GeometricTransformer.Transform2D(
                        limit,
                        oldSRef,
                        _display.SpatialReference).Envelope;

                    _display.ZoomTo(
                        GeometricTransformer.Transform2D(
                            env,
                            oldSRef,
                            _display.SpatialReference).Envelope
                        );
                }

                _map.LayerDefaultSpatialReference = _sr2.SpatialReference;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #4
0
        public Task <ICursor> PointQuery(gView.Framework.Carto.IDisplay display, IPoint point, ISpatialReference sRef, IUserData userdata)
        {
            TFWFile tfw = this.WorldFile as TFWFile;

            if (tfw == null)
            {
                return(Task.FromResult <ICursor>(null));
            }

            if (this.SpatialReference != null && sRef != null &&
                !sRef.Equals(this.SpatialReference))
            {
                point = GeometricTransformerFactory.Transform2D(point, sRef, this.SpatialReference) as IPoint;
            }
            if (point == null)
            {
                return(Task.FromResult <ICursor>(null));;
            }

            // Punkt transformieren -> Bild
            vector2[] vecs = new vector2[1];
            vecs[0] = new vector2(point.X, point.Y);

            if (!tfw.ProjectInv(vecs))
            {
                return(Task.FromResult <ICursor>(null));;
            }

            if (vecs[0].x < 0 || vecs[0].x >= _iWidth ||
                vecs[0].y < 0 || vecs[0].y >= _iHeight)
            {
                return(Task.FromResult <ICursor>(null));
            }

            switch (_type)
            {
            case RasterType.image:
                return(Task.FromResult <ICursor>(QueryImage((int)Math.Floor(vecs[0].x), (int)Math.Floor(vecs[0].y))));

            case RasterType.grid:
                return(Task.FromResult <ICursor>(QueryGrid((int)Math.Floor(vecs[0].x), (int)Math.Floor(vecs[0].y))));
            }

            return(Task.FromResult <ICursor>(null));;
        }
        static public void GeometryToSpatialReference(this IQueryFilter filter, ISpatialReference targetSRef)
        {
            if (targetSRef != null &&
                filter is ISpatialFilter &&
                ((ISpatialFilter)filter).Geometry != null &&
                ((ISpatialFilter)filter).FilterSpatialReference != null &&
                !targetSRef.Equals(((ISpatialFilter)filter).FilterSpatialReference))
            {
                var spatialFilter = (ISpatialFilter)filter;

                spatialFilter.Geometry =
                    GeometricTransformerFactory.Transform2D(
                        spatialFilter.Geometry,
                        spatialFilter.FilterSpatialReference,
                        targetSRef);
                spatialFilter.FilterSpatialReference = targetSRef;
            }
        }
Exemple #6
0
        public bool ProjectTo(ISpatialReference sRef)
        {
            if (_bounds == null)
            {
                return(false);
            }

            if (_sRef != null && !_sRef.Equals(sRef))
            {
                IGeometry result = GeometricTransformer.Transform2D(_bounds, _sRef, sRef);
                if (result != null && result.Envelope != null)
                {
                    _bounds = result.Envelope;
                    _sRef   = sRef;
                    return(true);
                }
            }
            return(true);
        }
        static public IGeometry Transform2D(IGeometry geometry, ISpatialReference from, ISpatialReference to)
        {
            if (geometry == null)
            {
                return(null);
            }

            if (from == null || to == null || from.Equals(to))
            {
                return(geometry);
            }

            using (IGeometricTransformer transformer = GeometricTransformerFactory.Create())
            {
                //transformer.FromSpatialReference = from;
                //transformer.ToSpatialReference = to;
                transformer.SetSpatialReferences(from, to);
                IGeometry transformed = transformer.Transform2D(geometry) as IGeometry;
                transformer.Release();

                return(transformed);
            }
        }
Exemple #8
0
        public IGeometry Transform(IGeometry geometry, ISpatialReference geometrySpatialReference)
        {
            if (geometry == null)
            {
                return(null);
            }

            if (geometrySpatialReference == null || _spatialReference == null || geometrySpatialReference.Equals(_spatialReference))
            {
                return(geometry);
            }

            IGeometricTransformer transformer = GeometricTransformerFactory.Create();

            //transformer.FromSpatialReference = geometrySpatialReference;
            //transformer.ToSpatialReference = _spatialReference;
            transformer.SetSpatialReferences(geometrySpatialReference, _spatialReference);

            IGeometry geom = transformer.Transform2D(geometry) as IGeometry;

            transformer.Release();

            return(geom);
        }
Exemple #9
0
        public void AddFeature(IFeature feature, ISpatialReference sRef, IFeatureLayer layer, string Category, IFields fields, IField primaryDisplayField)
        {
            if (feature == null)
            {
                return;
            }

            if (layer != null)
            {
                if (fields == null)
                {
                    fields = layer.Fields;
                }
                if (primaryDisplayField == null)
                {
                    primaryDisplayField = layer.Fields.PrimaryDisplayField;
                }
            }

            if (Category == "")
            {
                Category = "Results";
            }
            CategoryTreeNode parent = null;

            foreach (CategoryTreeNode node in treeObjects.Nodes)
            {
                if (node.Category == Category)
                {
                    parent = node;
                    break;
                }
            }
            if (parent == null)
            {
                parent = new CategoryTreeNode(Category);
                treeObjects.Nodes.Add(parent);
            }

            parent.Nodes.Add(new FeatureTreeNode(_doc, feature, sRef, layer, (primaryDisplayField != null) ? primaryDisplayField.name : "", 1));

            if (fields != null && feature.Fields != null)
            {
                List <FieldValue> fvs = gView.Framework.system.ListOperations <FieldValue> .Clone(feature.Fields);

                feature.Fields.Clear();

                foreach (IField field in fields.ToEnumerable())
                {
                    if (!field.visible)
                    {
                        continue;
                    }
                    for (int i = 0; i < fvs.Count; i++)
                    {
                        if (fvs[i].Name == field.name)
                        {
                            feature.Fields.Add(new FieldValue(field.aliasname, fvs[i].Value));
                            fvs.RemoveAt(i);
                            break;
                        }
                    }
                }
            }

            if (treeObjects.SelectedNode == null)
            {
                treeObjects.SelectedNode = parent.Nodes[0];

                if (_doc != null && _doc.FocusMap != null && _doc.FocusMap.Display != null)
                {
                    IGeometry shape = feature.Shape;
                    if (sRef != null && !sRef.Equals(_doc.FocusMap.Display.SpatialReference))
                    {
                        shape = GeometricTransformer.Transform2D(shape, sRef, _doc.FocusMap.Display.SpatialReference);
                    }
                    _doc.FocusMap.HighlightGeometry(shape, 300);
                }
                //parent.ExpandAll();
                parent.Expand();
                if (parent.Nodes.Count > 0)
                {
                    parent.Nodes[0].Expand();
                }
            }
        }
Exemple #10
0
        private void treeObjects_MouseClick(object sender, MouseEventArgs e)
        {
            if (_doc == null)
            {
                return;
            }
            if (_doc.FocusMap == null)
            {
                return;
            }
            if (_doc.FocusMap.Display == null)
            {
                return;
            }
            if (_doc.Application == null)
            {
                return;
            }

            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            TreeNode node = treeObjects.GetNodeAt(e.X, e.Y);

            if (/*node == treeObjects.SelectedNode &&*/ node is FeatureTreeNode)
            {
                IFeature          feature = ((FeatureTreeNode)node).Feature;
                ISpatialReference sRef    = ((FeatureTreeNode)node).SpatialReference;
                ILayer            layer   = ((FeatureTreeNode)node).Layer;

                if (feature != null && feature.Shape != null)
                {
                    if (e.X > 50)
                    {
                        IGeometry shape = feature.Shape;
                        if (sRef != null && !sRef.Equals(_doc.FocusMap.Display.SpatialReference))
                        {
                            shape = GeometricTransformer.Transform2D(shape, sRef, _doc.FocusMap.Display.SpatialReference);
                        }
                        _doc.FocusMap.HighlightGeometry(shape, 300);
                    }
                    else if (e.X >= 38)
                    {
                        IEnvelope envelope = feature.Shape.Envelope;
                        if (sRef != null && !sRef.Equals(_doc.FocusMap.Display.SpatialReference))
                        {
                            IGeometry geom = GeometricTransformer.Transform2D(envelope,
                                                                              sRef,
                                                                              _doc.FocusMap.Display.SpatialReference);
                            if (geom == null)
                            {
                                return;
                            }
                            envelope = geom.Envelope;
                        }
                        _doc.FocusMap.Display.ZoomTo(envelope);
                        if (layer != null && layer.MaximumZoomToFeatureScale > _doc.FocusMap.Display.mapScale)
                        {
                            _doc.FocusMap.Display.mapScale = layer.MaximumZoomToFeatureScale;
                        }
                        if (_doc.Application is IMapApplication)
                        {
                            ((IMapApplication)_doc.Application).RefreshActiveMap(DrawPhase.All);
                        }
                    }
                }
            }
        }
Exemple #11
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (_map == null || _display == null)
            {
                return;
            }

            try
            {
                bool refresh = false;

                _map.Name         = txtName.Text;
                _display.refScale = Convert.ToDouble(numRefScale.Value);

                if (cmbMapUnits.Enabled)
                {
                    _display.MapUnits = ((GeoUnitsItem)cmbMapUnits.SelectedItem).Unit;
                }

                _display.DisplayUnits = ((GeoUnitsItem)cmbDisplayUnits.SelectedItem).Unit;

                _display.BackgroundColor = btnBackgroundColor.BackColor.ToArgbColor();

                ISpatialReference oldSRef = _display.SpatialReference;
                _display.SpatialReference = _sr.SpatialReference;

                if (oldSRef != null &&
                    !oldSRef.Equals(_display.SpatialReference))
                {
                    IEnvelope limit = _display.Limit;
                    IEnvelope env   = _display.Envelope;

                    _display.Limit = GeometricTransformerFactory.Transform2D(
                        limit,
                        oldSRef,
                        _display.SpatialReference).Envelope;

                    _display.ZoomTo(
                        GeometricTransformerFactory.Transform2D(
                            env,
                            oldSRef,
                            _display.SpatialReference).Envelope
                        );
                }

                _map.LayerDefaultSpatialReference = _sr2.SpatialReference;

                _map.Title = txtTitle.Text;
                _map.SetLayerDescription(Map.MapDescriptionId, txtDescription.Text);
                _map.SetLayerCopyrightText(Map.MapCopyrightTextId, txtCopyright.Text);

                if (SystemVariables.SystemFontsScaleFactor != (float)numFontScaleFactor.Value / 100f)
                {
                    SystemVariables.SystemFontsScaleFactor = (float)numFontScaleFactor.Value / 100f;
                    _display.Screen?.RefreshSettings();

                    refresh = true;
                }

                #region Graphics Engine

                if (cmbGraphicsEngine.SelectedItem.ToString() != GraphicsEngine.Current.Engine.EngineName)
                {
                    var engine = Engines.RegisteredGraphcisEngines().Where(ge => ge.EngineName == cmbGraphicsEngine.SelectedItem.ToString()).FirstOrDefault();
                    if (engine != null)
                    {
                        GraphicsEngine.Current.Engine = engine;
                        RefreshFeatureRendererSymbolsGraphcisEngine();

                        refresh = true;
                    }
                }

                #endregion Graphics Engine

                if (refresh)
                {
                    if (_app != null)
                    {
                        _app.RefreshTOC();
                        _app.RefreshActiveMap(DrawPhase.All);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #12
0
        public void OnEvent(object MapEvent)
        {
            if (!(MapEvent is MapEvent))
            {
                return;
            }
            IMap map = ((MapEvent)MapEvent).Map;

            bool firstDataset = (map[0] == null);

            List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>();

            filters.Add(new OpenDataFilter());

            ExplorerDialog dlg = new ExplorerDialog("Add data...", filters, true);

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                List <IDataset> datasets = dlg.Datasets;


                FormDatasetProperties datasetProps = new FormDatasetProperties(datasets);
                try
                {
                    if (((MapEvent)MapEvent).UserData == null)
                    {
                        if (datasetProps.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                        {
                            return;
                        }
                    }
                }
                catch  // Kann ObjectDisposed Exception werfen...
                {
                    return;
                }


                Envelope env = null;
                foreach (ILayer layer in datasetProps.Layers)
                {
                    ISpatialReference sRef     = null;
                    IEnvelope         classEnv = null;
                    if (layer is IFeatureLayer && ((IFeatureLayer)layer).FeatureClass != null && ((IFeatureLayer)layer).FeatureClass.Envelope != null)
                    {
                        sRef     = ((IFeatureLayer)layer).FeatureClass.SpatialReference;
                        classEnv = ((IFeatureLayer)layer).FeatureClass.Envelope;
                    }
                    else if (layer is IRasterLayer && ((IRasterLayer)layer).RasterClass != null && ((IRasterLayer)layer).RasterClass.Polygon != null && ((IRasterLayer)layer).RasterClass.Polygon.Envelope != null)
                    {
                        sRef     = ((IRasterLayer)layer).RasterClass.SpatialReference;
                        classEnv = ((IRasterLayer)layer).RasterClass.Polygon.Envelope;
                    }
                    else if (layer is IWebServiceLayer && ((IWebServiceLayer)layer).WebServiceClass != null && ((IWebServiceLayer)layer).WebServiceClass.Envelope != null)
                    {
                        sRef     = ((IWebServiceLayer)layer).WebServiceClass.SpatialReference;
                        classEnv = ((IWebServiceLayer)layer).WebServiceClass.Envelope;
                    }

                    if (classEnv != null)
                    {
                        if (sRef != null && !sRef.Equals(map.Display.SpatialReference))
                        {
                            bool found = false;
                            foreach (string p in map.Display.SpatialReference.Parameters)
                            {
                                if (p.ToLower().Trim() == "+nadgrids=@null")
                                {
                                    found = false;
                                }
                            }
                            if (found)
                            {
                                classEnv = null;
                            }
                            else
                            {
                                IGeometry geom = GeometricTransformer.Transform2D(classEnv.ToPolygon(0), sRef, map.Display.SpatialReference);
                                if (geom != null)
                                {
                                    classEnv = geom.Envelope;
                                }
                                else
                                {
                                    classEnv = null;
                                }
                            }
                        }
                        if (classEnv != null)
                        {
                            if (env == null)
                            {
                                env = new Envelope(classEnv);
                            }
                            else
                            {
                                env.Union(classEnv);
                            }
                        }
                    }

                    map.AddLayer(layer);
                }
                //map.AddDataset(dataset, 0);


                if (env != null && map.Display != null)
                {
                    if (firstDataset)
                    {
                        map.Display.Limit = env;
                        map.Display.ZoomTo(env);
                    }
                    else
                    {
                        IEnvelope limit = map.Display.Limit;
                        limit.Union(env);
                        map.Display.Limit = limit;
                    }
                }
                ((MapEvent)MapEvent).drawPhase  = DrawPhase.All;
                ((MapEvent)MapEvent).refreshMap = true;
            }
        }
Exemple #13
0
        public ICursor PointQuery(gView.Framework.Carto.IDisplay display, gView.Framework.Geometry.IPoint point, ISpatialReference sRef, IUserData userdata)
        {
            if (display == null || point == null)
            {
                return(null);
            }

            IEnvelope dispEnvelope = display.Envelope;

            if (sRef != null)
            {
                ISpatialReference mySRef = SpatialReference.FromID(_srs.Srs[_srs.SRSIndex]);
                if (mySRef != null && !mySRef.Equals(sRef))
                {
                    // TODO:
                    // Stimmt net ganz, eigentlich wird beim Projezieren aus dem
                    // Envelope ein Polygon, auch der Punkt, der als X-Pixel, Y-Pixel
                    // übergeben wird, sollte sich ändern...
                    // --> World2Image stimmt nicht 100%
                    //
                    dispEnvelope = GeometricTransformer.Transform2D(dispEnvelope, sRef, mySRef).Envelope;
                }
            }
            double x = point.X, y = point.Y;

            display.World2Image(ref x, ref y);

            StringBuilder request = new StringBuilder("VERSION=1.1.1&REQUEST=GetFeatureInfo");

            request.Append("&QUERY_LAYERS=" + this.Name);
            request.Append("&QUERYLAYERS=" + this.Name);
            request.Append("&LAYERS=" + this.Name);
            //request.Append("&LAYERS=" + this.Name);
            request.Append("&EXCEPTIONS=" + _exceptions.Formats[0]);
            request.Append("&SRS=" + _srs.Srs[_srs.SRSIndex]);
            request.Append("&WIDTH=" + display.iWidth);
            request.Append("&HEIGHT=" + display.iHeight);
            request.Append("&INFOFORMAT=" + _getFeatureInfo.Formats[_getFeatureInfo.FormatIndex]);
            request.Append("&INFO_FORMAT=" + _getFeatureInfo.Formats[_getFeatureInfo.FormatIndex]);
            request.Append("&BBOX=" + dispEnvelope.minx.ToString(_nhi) + "," +
                           dispEnvelope.miny.ToString(_nhi) + "," +
                           dispEnvelope.maxx.ToString(_nhi) + "," +
                           dispEnvelope.maxy.ToString(_nhi));
            request.Append("&X=" + (int)x);
            request.Append("&Y=" + (int)y);

            string response;

            if (_getFeatureInfo.Formats[_getFeatureInfo.FormatIndex].ToLower().StartsWith("xsl/"))
            {
                return(new UrlCursor(WMSDataset.Append2Url(_getFeatureInfo.Get_OnlineResource, request.ToString())));
            }
            else
            {
                switch (_getFeatureInfo.Formats[_getFeatureInfo.FormatIndex].ToLower())
                {
                case "text/plain":
                    response = WebFunctions.HttpSendRequest(WMSDataset.Append2Url(_getFeatureInfo.Get_OnlineResource, request.ToString()));
                    return(new TextCursor(response));

                case "text/html":
                    return(new UrlCursor(WMSDataset.Append2Url(_getFeatureInfo.Get_OnlineResource, request.ToString())));

                case "text/xml":
                    response = WebFunctions.HttpSendRequest(WMSDataset.Append2Url(_getFeatureInfo.Get_OnlineResource, request.ToString()));
                    return(new RowCursor(Xml2Rows(response)));

                case "application/vnd.ogc.gml":
                    response = WebFunctions.HttpSendRequest(WMSDataset.Append2Url(_getFeatureInfo.Get_OnlineResource, request.ToString()));
                    return(new RowCursor(Gml2Rows(response)));
                }
            }
            return(null);
        }