Sinfogeo. Cursos SIG y Soluciones Geomáticas

  • Increase font size
  • Default font size
  • Decrease font size
Estás en Inicio Lee nuestro BLOG Implementación en ArcGIS del modelo de cambio de datum (ED50 -ETRS89) con modelado de distorsión mediante superficie de mínima curvatura (IGN)

Implementación en ArcGIS del modelo de cambio de datum (ED50 -ETRS89) con modelado de distorsión mediante superficie de mínima curvatura (IGN)

Rate this item
(19 votes)

Por defecto cuando instalamos ArcGIS en nuestro PC, las rejillas o ficheros de extensión “.gsb” que nos encontramos y que se emplean para la transformación de Datum ED50<->ETRS89,  suelen estar obsoletas o sucede que nos encontramos con una única rejilla que afecta exclusivamente a la península.

A continuación se explica paso a paso cómo debemos incorporar y/o  actualizar en ArcGIS (v9.3 o inferiores) las últimas rejillas recomendadas por el IGN para cambio de datum ED-50<->ETRS89 en formato Ntv2.

Este artículo está basado en la publicación de una nota técnica en el año 2009 por el Gobierno de la Rioja- IDERioja  http://www.iderioja.larioja.org/

1.- En la web del CNIG (IGN) http://www.cnig.es/ Ir al apartado Descargas/Herramientas/GRID_SHIFT_FILE V2009:  REJILLA PARA CAMBIO DE DATUM ENTRE ED50 Y ETRS89 EN FORMATO NTV2,

arcgis

2.- Al descargar y descomprimir el fichero, nos encontramos los ficheros “R2009V9.gsb” y “BALR2009.gsb”  para la península y para Baleares respectivamente. La última actualización corresponde al año 2009

arcgis

Estas rejillas son las necesarias en ArcGIS para que además de poder llevar a cabo la transformación correcta entre los datum ED50 y ETRS89 (en ambos sentidos) , poder también incorporar una transformación ajustada entre ED50 y WGS84 (en ambos sentidos), definidas ambas con los mismos parámetros de transformación.

3.-  En el directorio donde se encuentran los archivos del programa ArcGIS situarse en la carpeta “pedata\ntv2” (en la que se guardan por países los archivos de transformación por mallas regulares),  habitualmente en la ruta:

C:\Archivos de programa\ArcGIS\pedata\ntv2

4.- En ntv2, si no estuviera creado, generar el directorio “spain” y en él guardar el/los archivos de correcciones “.gsb” (Si estuviera creado “spain” entonces sustituir la rejilla que viene instalada por defecto, normalmente denominada “SPED2ETV2.gsb”, por la nueva para la península “R2009V9.gsb”)

5.-  El siguiente paso será modificar  el archivo de plantilla “Normal.mxt”  para actualizarlo. Este archivo se encuentra en la siguiente ruta:

C:\Documents and Settings\<nombre usuario>\Datos de programa\ESRI\ArcMap\Templates.

6.-  Pare ello ejecutar ArcMap y abrir un mapa nuevo vacío.

7.-  En el menú Tools seleccionar Macros -> Visual Basic Editor (se ejecuta el editor de Visual Basic).

 arcgis


8.- En la barra de herramientas Proyecto del editor, situada a la izquierda de la pantalla, explorar el árbol hasta: Normal (Normal.mxt) -> ArcMap Objetos -> ThisDocument (doble clic en ThisDocument,  se abre la ventana de diálogo).

9.-  Copiar en  esta ventana activa del editor de visual Basic, el siguiente texto que contiene el código de la subrutina en VB  (en su caso, sustituir el código que apareciera escrito por este otro que se indica debajo del esquema)

arcgis

Private Function MxDocument_NewDocument() As Boolean
CambioDatumED50ETRS89
CambioDatumED50WGS84
End Function
Private Function MxDocument_OpenDocument() As Boolean
CambioDatumED50ETRS89
CambioDatumED50WGS84
End Function
 
Sub CambioDatumED50ETRS89()
' Start by getting a handle on the current FocusMap
Dim pMxDoc As IMxDocument
Set pMxDoc = Application.Document
 
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
 
'  Set the input spatial reference to ED50
Dim pGCSin As IGeographicCoordinateSystem
'  Dim pSpRef1 As ISpatialReference
Dim pSpRFc As SpatialReferenceEnvironment
Set pSpRFc = New SpatialReferenceEnvironment
 
Set pGCSin = pSpRFc.CreateGeographicCoordinateSystem(4230)
'  Set pSpRef1 = pGCSin
'  pSpRef1.SetFalseOriginAndUnits -180, -90, 1000000
 
'  Set the output spatial reference to ETRS89
'  Dim pSpRef2 As ISpatialReference
Dim pGCSout As IGeographicCoordinateSystem
Set pGCSout = pSpRFc.CreateGeographicCoordinateSystem(4258)
 
'  Set pSpRef2 = pGCSout
'  pSpRef2.SetFalseOriginAndUnits -180, -90, 1000000
 
Dim pNTv2 As IGridTransformation
Set pNTv2 = New NTv2Transformation
 
'  A grid-based transformation has its data name set to
'  dataset_<country>/<filename>
pNTv2.Name = "ED50_ETRS89_ESPAÑA"
pNTv2.GridDatasetName = "dataset_spain/R2009V9.gsb”
pNTv2.PutSpatialReferences pGCSin, pGCSout
'   pNTv2.Load
 
'  Add the transformation to the operation set
Dim pGTSet As IGeoTransformationOperationSet
Set pGTSet = New GeoTransformationOperationSet
 
'  The Map uses IMapGeographicTransformations to access the geogtrans
Dim pMapGeo As IMapGeographicTransformations
Set pMapGeo = pMap
Set pGTSet = pMapGeo.GeographicTransformations
 
pGTSet.Set esriTransformForward, pNTv2
pGTSet.Set esriTransformReverse, pNTv2
 
'Now refresh the map
DoEvents
pMxDoc.ActiveView.Refresh
End Sub
 
Sub CambioDatumED50WGS84()
' Start by getting a handle on the current FocusMap
Dim pMxDoc As IMxDocument
Set pMxDoc = Application.Document
 
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
 
'  Set the input spatial reference to ED50
Dim pGCSin As IGeographicCoordinateSystem
'  Dim pSpRef1 As ISpatialReference
Dim pSpRFc As SpatialReferenceEnvironment
Set pSpRFc = New SpatialReferenceEnvironment
 
Set pGCSin = pSpRFc.CreateGeographicCoordinateSystem(4230)
'  Set pSpRef1 = pGCSin
'  pSpRef1.SetFalseOriginAndUnits -180, -90, 1000000
 
'  Set the output spatial reference to WGS84
'  Dim pSpRef2 As ISpatialReference
Dim pGCSout As IGeographicCoordinateSystem
Set pGCSout = pSpRFc.CreateGeographicCoordinateSystem(4326)
 
'  Set pSpRef2 = pGCSout
'  pSpRef2.SetFalseOriginAndUnits -180, -90, 1000000
 
Dim pNTv2 As IGridTransformation
Set pNTv2 = New NTv2Transformation
 
'  A grid-based transformation has its data name set to
'  dataset_<country>/<filename>
pNTv2.Name = "ED50_WGS84_ESPAÑA"
pNTv2.GridDatasetName = "dataset_spain/R2009V9.gsb"
pNTv2.PutSpatialReferences pGCSin, pGCSout
'   pNTv2.Load
 
'  Add the transformation to the operation set
Dim pGTSet As IGeoTransformationOperationSet
Set pGTSet = New GeoTransformationOperationSet
 
'  The Map uses IMapGeographicTransformations to access the geogtrans
Dim pMapGeo As IMapGeographicTransformations
Set pMapGeo = pMap
Set pGTSet = pMapGeo.GeographicTransformations
 
pGTSet.Set esriTransformForward, pNTv2
pGTSet.Set esriTransformReverse, pNTv2
 
'Now refresh the map
DoEvents
pMxDoc.ActiveView.Refresh
End Sub

10.-  Hacer clic en el botón con el símbolo play (Ejecutar -> Ejecutar Sub/User Form) del menú superior, guardar el archivo (Archivo -> Guardar  como “Normal.mxt” y se habrá actualizado la plantilla) y salir del editor de Visual Basic (Archivo -> Cerrar y volver a ArcMap).

arcgisarcgis

Desde este momento el proyecto activo, cualquier proyecto nuevo y todos los ya existentes

que se abran con ArcMap incorporan la transformación de cambio de datum correcta entre

ED50 y ETRS89.

11.- Comprobación:

Para comprobar que la transformación se ha incorporado correctamente a la aplicación basta con:

• Abrir un proyecto que tenga alguna capa de información en ED50 o un  “.shp”  en ED50 en

un proyecto nuevo.

arcgis

• Entrar en el gestor de sistemas de referencia,  en la barra de menús: View -> Data Frame

Properties. Hacer clic en Transformations .. y en el desplegable Into: seleccionar la opción

World\WGS84 (la última de la serie de posibilidades).

arcgis

• En el desplegable inferior (Using:) debe aparecer: ED50_WGS84_ESPAÑA y debajo:

Method: NTv2 – dataset=spain/R2009V9. Si no es así el programa no está incorporando la transformación correcta.

También  funciona en sentido contrario:

arcgis

NOTA

• Observar que con esta actualización de plantilla “Normal.mxt”,  en el código de la subrituna en VB hemos considerado únicamente la  rejilla para la península: “R2009V9”. Si necesitamos incorporar la rejilla recomendada por el IGN para la islas Baleares:  “BALR2009.gsb” , entonces el código para actualizar la plantilla “.mxt” sería el siguiente:

Private Function MxDocument_NewDocument() As Boolean
CambioDatumED50ETRS89
CambioDatumED50WGS84
End Function
Private Function MxDocument_OpenDocument() As Boolean
CambioDatumED50ETRS89
CambioDatumED50WGS84
End Function
 
Sub CambioDatumED50ETRS89()
' Start by getting a handle on the current FocusMap
Dim pMxDoc As IMxDocument
Set pMxDoc = Application.Document
 
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
 
'  Set the input spatial reference to ED50
Dim pGCSin As IGeographicCoordinateSystem
'  Dim pSpRef1 As ISpatialReference
Dim pSpRFc As SpatialReferenceEnvironment
Set pSpRFc = New SpatialReferenceEnvironment
 
Set pGCSin = pSpRFc.CreateGeographicCoordinateSystem(4230)
'  Set pSpRef1 = pGCSin
'  pSpRef1.SetFalseOriginAndUnits -180, -90, 1000000
 
'  Set the output spatial reference to ETRS89
'  Dim pSpRef2 As ISpatialReference
Dim pGCSout As IGeographicCoordinateSystem
Set pGCSout = pSpRFc.CreateGeographicCoordinateSystem(4258)
 
'  Set pSpRef2 = pGCSout
'  pSpRef2.SetFalseOriginAndUnits -180, -90, 1000000
 
Dim pNTv2 As IGridTransformation
Set pNTv2 = New NTv2Transformation
 
'  A grid-based transformation has its data name set to
'  dataset_<country>/<filename>
pNTv2.Name = "ED50_ETRS89_ESPAÑA"
pNTv2.GridDatasetName = "dataset_spain/BALR2009.gsb”
pNTv2.PutSpatialReferences pGCSin, pGCSout
'   pNTv2.Load
 
'  Add the transformation to the operation set
Dim pGTSet As IGeoTransformationOperationSet
Set pGTSet = New GeoTransformationOperationSet
 
'  The Map uses IMapGeographicTransformations to access the geogtrans
Dim pMapGeo As IMapGeographicTransformations
Set pMapGeo = pMap
Set pGTSet = pMapGeo.GeographicTransformations
 
pGTSet.Set esriTransformForward, pNTv2
pGTSet.Set esriTransformReverse, pNTv2
 
'Now refresh the map
DoEvents
pMxDoc.ActiveView.Refresh
End Sub
 
Sub CambioDatumED50WGS84()
' Start by getting a handle on the current FocusMap
Dim pMxDoc As IMxDocument
Set pMxDoc = Application.Document
 
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
 
'  Set the input spatial reference to ED50
Dim pGCSin As IGeographicCoordinateSystem
'  Dim pSpRef1 As ISpatialReference
Dim pSpRFc As SpatialReferenceEnvironment
Set pSpRFc = New SpatialReferenceEnvironment
 
Set pGCSin = pSpRFc.CreateGeographicCoordinateSystem(4230)
'  Set pSpRef1 = pGCSin
'  pSpRef1.SetFalseOriginAndUnits -180, -90, 1000000
 
'  Set the output spatial reference to WGS84
'  Dim pSpRef2 As ISpatialReference
Dim pGCSout As IGeographicCoordinateSystem
Set pGCSout = pSpRFc.CreateGeographicCoordinateSystem(4326)
 
'  Set pSpRef2 = pGCSout
'  pSpRef2.SetFalseOriginAndUnits -180, -90, 1000000
 
Dim pNTv2 As IGridTransformation
Set pNTv2 = New NTv2Transformation
 
'  A grid-based transformation has its data name set to
'  dataset_<country>/<filename>
pNTv2.Name = "ED50_WGS84_ESPAÑA"
pNTv2.GridDatasetName = "dataset_spain/BALR2009.gsb”
pNTv2.PutSpatialReferences pGCSin, pGCSout
'   pNTv2.Load
 
'  Add the transformation to the operation set
Dim pGTSet As IGeoTransformationOperationSet
Set pGTSet = New GeoTransformationOperationSet
 
'  The Map uses IMapGeographicTransformations to access the geogtrans
Dim pMapGeo As IMapGeographicTransformations
Set pMapGeo = pMap
Set pGTSet = pMapGeo.GeographicTransformations
 
pGTSet.Set esriTransformForward, pNTv2
pGTSet.Set esriTransformReverse, pNTv2
 
'Now refresh the map
DoEvents
pMxDoc.ActiveView.Refresh
End Sub

Visita   http://www.sinfogeo.es/es/listadocursos/tig/109-curso-arcgis.html si quieres conocer detalles sobre nuestro curso de ArcGIS

1 Comment

  • Comment Link BrigitteBLAKE34 Thursday, 13 January 2011 22:35 posted by BrigitteBLAKE34

    Some time ago, I really needed to buy a good car for my organization but I didn't earn enough cash and could not buy something. Thank God my friend adviced to try to take the home loans at reliable bank. Hence, I acted that and was satisfied with my short term loan.

Leave a comment

Rellena los campos con asterisco (*)