5 votos

Que función en el punto en C#

Quiero obtener la función en donde el ratón se hizo clic en mapa. Así que me preguntaba cómo obtener características que cruza con ese punto. Además me preguntaba ¿cómo puedo comprobar qué tipo de objeto es (punto, poli línea, polígono)?

4voto

Flinkman Puntos 4821

Seleccione en el mapa mediante la selección actual entorno (puede desactivar selectability y visibilidad de las capas, a continuación, este no recogerlos.

En primer lugar usted necesita para ser la creación de una herramienta:

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;

namespace RED
{
    public class REd : ESRI.ArcGIS.Desktop.AddIns.Tool

A continuación, en el evento OnMouseDown de la herramienta:

protected override void OnMouseDown(MouseEventArgs arg)
{
    //if (arg.Button == System.Windows.Forms.MouseButtons.Left) // check for left mouse button if you like
    // convert point from 'screen' to 'map' coordinates
    IPoint MouseMapPoint = (ArcMap.Document.FocusMap as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(arg.X, arg.Y);
    // clear selection first
    ArcMap.Document.FocusMap.ClearSelection();
    // Select using the shape (point) to
    // select the feature(s) - false to select any intersecting, true to select just the first
    ArcMap.Document.FocusMap.SelectByShape(MouseMapPoint,(ArcMap.Application as IMxApplication).SelectionEnvironment,false);
    // get the (now) selected features
    IEnumFeature EnumFeatures = (IEnumFeature)ArcMap.Document.FocusMap.FeatureSelection;
    IFeature ThisFeature = EnumFeatures.Next();
    do
    {
        // get the geometry
        IGeometry ThisGeom = ThisFeature.ShapeCopy; // IMPORTANT! USE SHAPECOPY not SHAPE
        // do something different for each geometry type
        if (ThisGeom.GeometryType == esriGeometryType.esriGeometryPoint)
        { 
            // something for points (note: does not include multipoint)
        }
        else if (ThisGeom.GeometryType == esriGeometryType.esriGeometryPolygon)
        { 
            // something for polygons
        }
        else if (ThisGeom.GeometryType == esriGeometryType.esriGeometryPolyline)
        { 
            // something for polylines (note: polylines are different to lines)
        }
        else
        { 
            // unrecognized geometry type
        }
        ThisFeature = EnumFeatures.Next();
    } while (ThisFeature != null);  
}

Lo que funciona bien para seleccionar el uso de un punto de... este va a tener problemas al intentar seleccionar un punto o línea de modo para contador que uso un aumento de la búsqueda de búfer (polígono) para hacer la selección:

// to increase the search

    IGeometry selectionGeometry = (MouseMapPoint as ITopologicalOperator).Buffer(SmallDistance); // make a buffer
    ArcMap.Document.FocusMap.SelectByShape(selectionGeometry, (ArcMap.Application as IMxApplication).SelectionEnvironment, false);

Leer acerca de IMap.SelectByShape, IEnumFeature, ITopologicalOperator y Esri Geometría de las Constantes de Tipo

Normalmente no lo hago de esa manera - la selección de medio ambiente pone en el camino, así que el uso de IMap.Capas para iterar a través de cada capa, a continuación, con un ISpatialFilter hacer una selección en contra de cada capa... que funciona incluso si la capa es invisible y/o no se pueden seleccionar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X