Necesito cambiar la referencia espacial de un MXD mediante programación. En ArcMap interfaz de usuario, me gustaría tomar los siguientes pasos: 1) Abrir las propiedades del marco de datos e ir a la pestaña Sistema de Coordenadas; 2) haga clic en el pequeño botón de globo (Agregar Sistema de Coordenadas) y elija Nuevo Sistema de Coordenadas Proyectadas; 3) elegir Mercator; 4) introducir nombre personalizado para el sistema de coordenadas; 5) cambiar el Standard_Parallel_1 parámetro en el valor adecuado; y 6) Guardar y pulse aceptar. En última instancia, la necesidad de automatizar este proceso a lo largo de cientos de MXDs.
Realmente estoy muy confundido acerca de dónde comenzar. Mi investigación se ha convertido en un montón de referencias a IProjectedCoordinateSystemEdit y sus clases e interfaces para la lectura/escritura de parámetros para matrices con IParamter y relacionados, pero me estoy encontrando una gran cantidad de información confusa. Es así, que las Interfaces y Clases debo comenzar con, y cuál es la manera más concisa de lograr la automatización del proceso que describo arriba?
Mi código en la actualidad se abre el MXD para ser procesados en un IMapDocument y los cambios de un conjunto de PageLayout y los ajustes del Mapa. Lo que queda es el cambio de la referencia espacial. Gracias por la orientación que usted puede ofrecer.
ACTUALIZACIÓN (@Hornbydd) Aquí es el de Python cuerpo principal del código. (Por CIERTO, cuando se accede a ArcObjects de Python, una cosa que Python no se puede hacer es implementar interfaces, de modo de responder a los eventos y a la ampliación de ArcGIS no es posible. Todavía tengo que encontrar los objetos com que no puede acceder, sin embargo.)
f = open(chartprops, 'r')
i = 0
for chrt in f:
if i == 0: #skip the header
i = i + 1
continue
props = chrt.split(',')
chartnm = props[0]
scale = float(props[1])
latorig = props[2]
pixwidth = float(props[3])
pixheight = float(props[4])
if len(props) > 5:
pprwidth = float(props[5])
pprheight = float(props[6])
pprorienttxt = props[7]
else:
pprwidth = pixwidth / 254.0
pprheight = pixheight / 254.0
if pprwidth > pprheight:
pprorienttxt = 'LANDSCAPE'
else:
pprorienttxt = 'PORTRAIT'
if pprorienttxt == 'PORTRAIT':
pprorient = 1
else:
pprorient = 2
#copy template chart MXD to chart output location
#==== WARNING! ====
# If the mxd already exists in the detination folder,
# it will be overwritten
#==================
destmxd = outloc + os.path.sep + chartnm + '.mxd'
shutil.copy(templt, destmxd)
pMapDoc = NewObj(esriCarto.MapDocument, esriCarto.IMapDocument)
pMapDoc.Open(destmxd)
pPgLayout = pMapDoc.PageLayout
pPgLayout3 = CType(pPgLayout, esriCarto.IPageLayout3)
pPage = pPageLayout3.Page
pPage.Units(esriInches)
pPage.PutCustomSize(pprwidth, pprheight)
pPage.Orientation(pprorient)
pMap = pMapDoc.Map
pMap.MapUnits(esriInches)
pMap.SetPageSize(pprwidth, pprheight)
pMap.ReferenceScale(1.0/scale)
pMap.MapScale(1.0/scale)
pMapDoc.Close()
i = i + 1
f.close()