Processing math: 25%

6 votos

Cómo permitir que el usuario seleccione una referencia espacial el uso de ArcObjects?

Necesito construir una herramienta donde el usuario selecciona un sistema de coordenadas para un determinado archivo CAD. ¿Cuál es la manera más fácil de hacer esto con ArcObjects?

Obviamente, yo podría rellenar una lista con los cientos de proyección constantes (es decir, esrSRProjCSType), pero lo que el usuario va a querer desplazarse a través de una enorme lista? Debe haber una mejor manera... ¿algún consejo?

Actualización:

Gracias a todos. Me fui con la SpatialReferenceDialog enfoque de abajo. Ahora, nadie sabe cómo utilizar NewGeoTransformationDialog para aplicar dato trans?

private void btn_getCs_Click(object sender, EventArgs e)
    {

        string StatusMsg = "";
        bool Status = true;
        SpatialReferenceDialog oSpatialReferenceDialog = null;
        ISpatialReference oSpatialReference = null;
        ISpatialReferenceFactory2 oSpatialReferenceFactory2 = null;
        IGeographicCoordinateSystem oGCS = null;

        try
        {
            oSpatialReferenceFactory2 = (SpatialReferenceEnvironmentClass)new SpatialReferenceEnvironmentClass();
            oGCS = oSpatialReferenceFactory2.CreateGeographicCoordinateSystem(esriSRGeoCSType.esriSRGeoCS_WGS1984.GetHashCode());
            oSpatialReferenceDialog = new SpatialReferenceDialogClass();
            oSpatialReference = oSpatialReferenceDialog.DoModalEdit(oGCS, false, false, false, false, true, this.Handle.ToInt32());

            txtBx_srDwg.Text = oSpatialReference.Name;
        }
        catch (System.Runtime.InteropServices.COMException CE)
        {
            StatusMsg = CE.ErrorCode.ToString() + ": " + CE.Message;
            Status = false;
        }
        catch (Exception E)
        {
            StatusMsg = E.ToString();
            Status = false;
        }
        finally
        {
        }
}

7voto

Michael La Voie Puntos 56

Usted puede utilizar el construido en SpatialReferenceDialog que permite que el usuario seleccione la referencia espacial. He aquí un ejemplo construido en VB.NET que puedo usar en una de mis aplicaciones. pSR se establece como ESRI.ArcGIS.De la geometría.ISpatialReference y SelectSR es un valor Booleano que yo uso para comprobar si el usuario ha seleccionado una válida referencia espacial. Comprobar la versión más reciente de cada una de las interfaces.

Private Sub cmdSetReference_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSetReference.Click

    Dim pSRDialog As ESRI.ArcGIS.CatalogUI.ISpatialReferenceDialog2 = New ESRI.ArcGIS.CatalogUI.SpatialReferenceDialog

    pSR = pSRDialog.DoModalCreate(False, False, False, 0)
    If Not pSR Is Nothing Then
        If Not TypeOf pSR Is ESRI.ArcGIS.Geometry.IGeographicCoordinateSystem2 And Not TypeOf pSR Is ESRI.ArcGIS.Geometry.IProjectedCoordinateSystem5 Then
            System.Windows.Forms.MessageBox.Show("Please select a projected or geographic coordinate system.   ", "Unknown Coordinate System", Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Exclamation)
            SelectSR = False
        Else
            SelectSR = True
        End If
    Else
        SelectSR = False
    End If
End Sub

2voto

auramo Puntos 161
  1. Inicializar un IGxDialog y establezca su ObjectFilter propiedad IGxObjectFilter instanciado con el GxFilterSpatialReferences co-clase.
  2. Mostrar el cuadro de diálogo utilizando DoModalOpen()
  3. Obtener el primer IGxObject de la salida IEnumGxObject (y comprobar que el valor no es nulo).
  4. Elenco de la IGxObject a IGxPrjFile.
  5. Devolver su SpatialReference de la propiedad.

Vea aquí un ejemplo de C#.

Si necesita más control sobre qué tipos de referencias espaciales se pueden seleccionar, implementar IGxObjectFilter en una nueva clase y el uso para el IGxDialog's ObjectFilter de la propiedad en su lugar (véase aquí para una VB6 ejemplo).

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