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); }
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]); } } }
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); } }
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; } }
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); } }
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); }
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(); } } }
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); } } } } }
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); } }
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; } }
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); }