blog oficial

http://sigyury.blogspot.com.br/

jueves, 8 de mayo de 2014

Funciones de la calculadora de ArcGis

Estas funciones no muestran su documentación en ArcGis... y por tanto resulta algo fastidioso de desenmarañar, pues acá esta el resultado para las siguientes funciones: 
TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
NUMÉRICA
Abs
Devuelve un valor del mismo tipo que el que se pasó como parámetro y que especifica el valor absoluto de un número.
Abs(número)
Número
Puede ser cualquier expresión numérica válida. Si númerocontiene Null, la función devolveráNull; si es una variable no inicializada, devolverá cero.
Atn
Devuelve el arcotangente de un número en un tipoDouble.
Atn(número)
Número
Es de tipo Double o cualquier expresión numérica válida.
Cos
Devuelve el coseno de un ángulo en tipoDouble.
Cos(número)
Número
Es de tipo Double o cualquier expresión numérica válidaque expresa un ángulo en radianes.
Exp
Devuelve un tipoDouble que especificae (la base de los logaritmos naturales) elevado a una potencia.
Exp(número)
Número
Es de tipo Double o cualquier expresión numérica válida.
Fix
Devuelve la parte entera de un número.(A diferencia del INT, la función FIX() devuelve el primer entero negativo mayor o igual a número en el caso en que el argumento sea negativo)
Fix(número)
Número
Es de tipo Double o cualquier expresión numérica válida. Si númerocontiene Null, la función devolveráNull.
Int
Devuelve la parte entera de un número.(A diferencia del FIX, la función INT() devuelve el primer entero negativo menor o igual a número en el caso en que el argumento sea negativo)
Int(número)
Número
Es de tipo Double o cualquier expresión numérica válida. Si númerocontiene Null, la función devolveráNull.
Log
Devuelve el logaritmo natural de un número en tipo Double.
Log(número)
Número
Es de tipo Double o cualquier expresión numérica válida mayor que cero


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
NUMBER
Sin
Devuelve el seno de un ángulo en tipo Double.
Sin(número)
Número
Es de tipo Double o cualquier expresión numérica válida que expresa un ángulo en radianes.
Sqr
Devuelve la raíz cuadrada de un número en tipo Double.
Sqr(número)
Número
Es de tipo Double o cualquier expresión numérica válida mayor o igual a cero.
Tan
Devuelve la tangente de un ángulo en tipo Double.
Tan(número)
Número
Es de tipo Double o cualquier expresión numérica válida que expresa un ángulo en radianes.
STRING
Asc
Devuelve el código de carácter correspondiente a la primera letra de una cadena, en tipo Integer que representa.
NOTA: Cambia de String a ASCII
Asc(cadena)
Cadena
Debe ser una expresión de cadena válida. Si cadena no contiene caracteres, se produce un error en tiempo de ejecución
Chr

Devuelve un tipo String que contiene el carácter asociado con el código de carácter especificado.
NOTA: Cambia de ASCII a String
Chr(códigocar)
Códigocar
Es un tipo Long que identifica a un carácter.
Int
Devuelve un tipo Variant(String) que contiene una expresión formateada de acuerdo a las instrucciones contenidas en una expresión de formato.
Format(expresión[,formato[,primerdíadesemana[,primerdíadeaño]]])
Expresión:Requerido. Cualquier expresión válida.
Formato: Opcional. Una expresión de formato definida por el usuario o con nombre válido.
Primerdíadesemana:Opcional. Una constante que especifica el primer día de la semana.
Primerdíadeaño:Opcional. Una constante que especifica la primera semana del año.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
STRING
InStr
Devuelve un tipoVariant (Long) que especifica la posición de la primera aparición de una cadena en otra.
InStr([start, ]string1, string2[, compare])
Start: Opcional. Expresión numérica que establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la posición del primer carácter. Si iniciocontiene un valor Null, se produce un error. El argumento inicio se requiere si se especificacompare.
String1: Requerido. Expresión de cadena en la que se busca.
String2: Requerido. Expresión de cadena buscada.
Compare: Opcional. Especifica el tipo de comparación de cadena. Si compare es Null, ocurre un error. Si se omite compare, el valorOption Comparedetermina el tipo de comparación. Especifica un LCID (LocaleID) válido para usar reglas específicas de configuración regional en la comparación.
LCase
Devuelve un tipo String que se ha convertido a minúsculas.
LCase(cadena)
Cadena
Es cualquier expresión de cadena válida. Si stringcontiene Null, se devuelve Null.
Left
Devuelve un tipoVariant (String) que contiene un número especificado de caracteres del lado izquierdo de una cadena.
Left(string, length)
String: Requerido. Expresión de cadena de la cual se devuelven los caracteres que están más a la izquierda. Si stringcontiene Null, se devuelve Null.
Length: Requerido, un tipo Variant (Long). Expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, devuelve una cadena de longitud cero (""). Si es mayor o igual al número de caracteres enstring, se devuelve la cadena entera.
Len
Devuelve un tipo Long que contiene el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.
Len(cadena |nombrevar)
Cadena: Cualquier expresión de cadena válida. Si la cadenacontiene Null, se devuelve Null.
Nombrevar: Cualquier nombre de variable válido. Si nombrevarcontiene Null, se devuelve Null. Sinombrevar es un tipo Variant, Len actúa igual que con un tipo String y siempre devuelve el número de caracteres que contiene.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
STRING
LTrim
Devuelve un tipoVariant (String) que contiene una copia de una cadena determinada sin espacios a la izquierda (LTrim).
LTrim(cadena)
Cadena
El argumento cadena obligatorio es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelveNull.
Mid
Devuelve un tipoVariant (String) que contiene un número especificado de caracteres de una cadena.
Mid(string, start[, length])
String: Requerido. Expresión de cadena de la cual se devuelven los caracteres. Si el string contiene Null, se devuelve Null.
Start: Requerido; un tipo Long. Posición de carácter en string en la cual comienza la parte que se quiere tomar. Si start es mayor que el número de caracteres en la string,Mid devuelve una cadena de longitud cero ("").
Length: Requerido; un tipo Variant(Long). Número de caracteres que se van a devolver. Si se omite o en el texto hay menos de length caracteres (incluyendo el carácter de start), se devuelven todos los caracteres desde la posición de start hasta el final de la cadena.
QBColor
Devuelve un tipo Long que representa el código de color RGB correspondiente al número de color especificado.
QBColor(color)
Color
El argumento color toma los siguientes valores
0
Negro
8
Gris
1
Azul
9
Azul claro
2
Verde
10
Verde claro
3
Aguamarina
11
Aguamarina claro
4
Rojo
12
Rojo claro
5
Fucsia
13
Fucsia claro
6
Amarillo
14
Amarillo claro
7
Blanco
15
Blanco brillante


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
STRING
Right
Devuelve un tipoVariant (String) que contiene un número especificado de caracteres del lado derecho de una cadena.
Right(string, lenght)
String: Requerido. Expresión de cadena desde la cual se devuelven los caracteres que están más a la derecha. Si stringcontiene Null, se devuelve Null.
Lenght: Requerido, un tipo Variant (Long). Expresión numérica que indica cuántos caracteres se van a devolver. Si es 0, se devuelve una cadena de longitud cero (""). Si es mayor o igual al número de caracteres en string, se devuelve la cadena completa.
RTrim
Devuelve un tipoVariant (String) que contiene una copia de una cadena determinada sin espacios a la derecha (RTrim).
RTrim(cadena)
Cadena
El argumento cadenaobligatorio es cualquier expresión de cadena válida. Si cadenacontiene Null, se devuelve Null.
Space
Devuelve un tipoVariant (String) que consiste en un número especificado de espacios.
Space(número)
Número
Es el número de espacios que se desea incluir en la cadena.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
STRING
StrConv
Devuelve un tipoVariant (String) que se convierte como se especifica.
StrConv(string, conversion, LCID)
String: Requerido. Expresión de cadena que se va a convertir.
ConversiónRequerido. Un tipo Integer. La suma de los valores que especifica el tipo de conversión que se va a realizar.
LCID: Opcional. La LocaleID, si es diferente de la LocaleID del sistema. (La LocaleID del sistema es la predeterminada.).
Los valores del argumento conversion son:
vbUpperCase
1
Convierte la cadena a caracteres en mayúscula.
vbLowerCase
2
Convierte la cadena a caracteres en minúscula.
vbProperCase
3
Convierte a mayúscula la primera letra de cada palabra de la cadena.
vbWide*
4*
Convierte los caracteres cortos (un único byte) de la cadena a caracteres anchos (doble byte).
vbNarrow*
8*
Convierte los caracteres anchos (doble byte) de la cadena a caracteres cortos (un único byte).
vbKatakana**
16**
Convierte los caracteres Hiragana de la cadena a caracteres Katakana.
vbHiragana**
32**
Convierte los caracteres Katakana de la cadena a caracteres Hiragana.
vbUnicode
64
Convierte la cadena aUnicodeutilizando la página de códigos predeterminada del sistema. (No disponible en Macintosh.)
vbFromUnicode
128
Convierte la cadena de Unicode a la página de códigos predeterminada del sistema. (No disponible en Macintosh.)


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
STRING
String
Devuelve un tipoVariant (String) que contiene una cadena de caracteres que se repite de la longitud especificada.
String(number, character)
Number:Requerido; un tipo Long. Longitud de la cadena devuelta. Si númerocontiene Null, se devuelve Null.
Carácter:Requerido; un tipo Variant. Código de carácter que especifica el carácter o la expresión de cadena cuyo primer carácter se utiliza para construir la cadena devuelta. Si charactercontiene Null, se devuelve Null.
Trim
Devuelve un tipoVariant (String) que contiene una copia de una cadena determinada sin espacios ni a la derecha ni a la izquierda (Trim).
Trim(cadena)
Cadena
El argumentocadenaobligatorio es cualquier expresión de cadena válida. Sicadena contiene Null, se devuelveNull.
UCase
Devuelve un tipoVariant (String) que contiene una cadena especificada que se ha convertido a mayúsculas.
UCase(cadena)
Cadena
Es cualquier expresión de cadena válida. Sicadena contiene Null, se devuelveNull.
DATE
Date
Devuelve un tipoVariant (Date) que contiene la fecha actual del sistema.
Date
-
DateAdd
Devuelve un valor de tipo Variant (Date) con una fecha a la que se ha agregado un intervalo de tiempo especificado.
DateAdd(intervalo, número, fecha)
Intervalo:Requerido. Expresión de cadena que contiene el intervalo de tiempo que se desea agregar.
Número:Requerido. Expresión numérica con el número de intervalos que se desea agregar. Puede ser positiva (para obtener fechas futuras) o negativa (para obtener fechas pasadas).
Fecha:Requerido. Valor de tipo Variant(Date) o literal que representa la fecha en la que se agregó el intervalo.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
DATE
DateAdd

DateAdd(intervalo, número, fecha)
El argumentointervalo tiene los siguientes valores:
Valor
Descripción
yyyy
Año
q
Trimestre
m
Mes
y
Día del año
d
Día
w
Día de la semana
ww
Semana
h
Hora
n
Minuto
s
Segundo
DateDiff
Devuelve un valor de tipo Variant (Long) que especifica el número de intervalos de tiempo entre dos fechas determinadas.
DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[,primerasemanaaño]])
Intervalo:Requerido. Expresión de cadena con el intervalo de tiempo utilizado para calcular la diferencia entrefecha1 y fecha2.
Fecha1fecha2:Requerido; Variant(Date). Las dos fechas que se van a utilizar en el cálculo.
Primerdíasemana:Opcional. Constante que especifica el primer día de la semana. Si no se especifica, se asume que es el domingo.
Primerasemanaaño:Opcional. Constante, que especifica la primera semana del año. Si no se especifica, se asume que es aquélla en la que se encuentre el 1 de enero.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
DATE
DateDiff

DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[,primerasemanaaño]])
El argumento intervalotiene los siguientes valores:
Valor
Descripción
yyyy
Año
q
Trimestre
m
Mes
y
Día del año
d
Día
w
Día de la semana
ww
Semana
h
Hora
n
Minuto
s
Segundo
DatePart
Devuelve un valor de tipo Variant(Integer) que contiene la parte especificada de la fecha dada.
DatePart(intervalo,fecha[,primerdíasemana[,primerasemanaaño]])
Intervalo: Requerido. Expresión de cadena con el intervalo de tiempo que desea devolver.
Fecha: Requerido. Tipo de valor Variant (Date) que se desea evaluar.
Primerdíasemana:Opcional. Una constante que especifica el primer día de la semana. Si no se especifica, se asume que es el domingo.
Primerasemanaaño:Opcional. Una constante que especifica la primera semana del año. Si no se especifica, se asume que es aquélla en la que se encuentre el 1 de enero.


TIPO
FUNCIÓN
DESCRIPCIÓN
SINTAXIS
ARGUMENTO
DATE
DatePart

DatePart(intervalo,fecha[,primerdíasemana[,primerasemanaaño]])
El argumentointervalo tiene los siguientes valores:
Valor
Descripción
yyyy
Año
q
Trimestre
m
Mes
y
Día del año
d
Día
w
Día de la semana
ww
Semana
h
Hora
n
Minuto
s
Segundo
Now
Devuelve un valor de tipo Variant (Date) que especifica la fecha y hora actuales de acuerdo con la configuración de la fecha y la hora del sistema de su equipo.
Now
-

Ejemplo del uso de las funciones, aveces necesitamos separar alguna cadema de caracteres que tenemos en un campo desde ArcGis, pues bien para evitarnos pasar nuesta tabla a (dbase) .dbf con la consecuente perdida de acentos debido al encoding, y con el problema que tenemos al abrir esta nueva tabla desde el Excel con sus limitaciones en cuanto a la carga de registros, vamos a realizarlo utilizando las funciones básicas de la calculadora de ArcGis: 

pues bien: 
si tenemos un campo 

NombreC
Pedro Plinio Perez Plazas
y queremos pasarlo a: 

Nombre1
Nombre2
Apellido1
Apellido2
Pedro
Plinio
Perez
Plazas

podemos usar la siguiente formula de la calculadora del ArcGis: 
desde el campo Nombre1 calculamos: 

Trim(Mid(NombreC1,InStr(1,NombreC, " ")-1))
para obtener: 

Nombre1
Nombre2
Apellido1
Apellido2
Pedro




Luego desde el campo Nombre2 calculamos: 

Trim(Mid(NombreCInStr( InStr(1,NombreC, " ")+1,NombreC, " "),InStr(InStr(1,NombreC, " ")+1,NombreC, " ")-1)
para obtener:

Nombre1
Nombre2
Apellido1
Apellido2
Pedro
Plinio



y así se continúa hasta completar, este ejemplo se muestra a modo de ilustración comenten si les da resultado y Bienvenidos todos los aportes. 

                  agradecimientos a Jhessykha Gutierrez por su aporte
Share:

jueves, 1 de mayo de 2014

10 habilidades para usar eficazmente un SIG
excellent
En esta entrada vamos a presentar 10 habilidades que debe tener un técnico GIS para usar eficazmente un Sistema de Información Geográfico:Conocer todos los tipos de archivos o formatos GIS que existen, sus fortalezas y debilidades. Así como saber transformar información espacial entre los distintos formatos e importar y exportar datos geográficos.

  1. Saber vincular tablas (hojas de Excel o tablas de bases de datos) a los datos GIS existentes. El propósito de la vinculación de datos a un mapa es visualizar la distribución de un conjunto a través de un mapa temático. Vincular tus propios datos en un shapefile es extremadamente útil.
  2. Trabajar con bases de datos espaciales. La gestión de información es más eficiente si mantenemos nuestros datos geográficos almacenados en una base de datos espacial. Además la gestión de información es más eficiente y se obtiene mejor rendimiento con grandes volúmenes de datos.
  3. Edición y control de errores. Creación de topológia. Tanto saber cómo crear puntos, líneas o polígonos, como añadir, eliminar o mover vértices. Trabajar con el snapping y por último crear topología, para comprobar que no haya errores de superposición, solape, nodos colgantes, etc.
  4. Saber gestionar las proyecciones y los sistemas de coordenadas. Las coordenadas geográficas, las proyecciones cartográficas y realizar  transformaciones entre diferentes sistemas de coordenadas.
  5. Realizar consultas, tanto basadas en unos atributos como consultas espaciales, Poder seleccionar registros de un conjunto de datos, bajo unos criterios determinados. No está de más saber SQL, que aunque no es propiamente un lenguaje de programación es un lenguaje de consultas.
  6. Usar herramientas de geoprocesamiento, tanto con datos vectoriales como con datos raster. Saber realizar buen análisis espacial es fundamental, pero requiere saber pensar en GIS, tener esta habilidad espacial se entrena con el tiempo. Aprende a resolver problemas espaciales,  conoce los métodos a aplicar y el resultado que se debe esperar. Incluimos en este apartadoautomatizar tareas GIS. Python es el lenguaje de programación que utilizan tanto ArcGIS (ArcPy), QGIS (PyQGIS) o gvSIG (jython)
  7. Crear una composición de mapa, un buen diseño incluye una óptima ubicación de los elementos gráficos, como la leyenda, el norte, la escala, logos, etc. Aquí incluimos el trabajo y la composición con mapas temáticos, uso de cloropletas, simbología avanzada, etc. Así como el uso de etiquetado. En este apartado incluimos la creación de colecciones de mapas, bien sea utilizando Atlas de QGIS, Data Driven Pages de ArcGIS, etc
  8. Publicar la cartografía online. publicar directamente online nuestras composiciones creadas con nuestro cliente SIG de escritorio, por ejemplo con ArcGIS online. Podemos utilizar unapaquete para crear una arquitectura geoespacial completa o utilizar algunos de los servicios que nos ofrecen publicar nuestros datos online, como cartoDB, MapBox, Google Fusion Tables, etc.
  9. Trabajar con metadatos. Además de documentar bien la información geográfica y que sea conforme a INSPIRE, también es importante documentar los servicios de publicación de mapas en Internet (WMS, FFS, WCS, etc)
Share:

QGIS GUÍA DE USUARIO

Share:

miércoles, 30 de abril de 2014

MANUAL PARA GEORREFERENCIACIÓN DE IMAGENES Y TRANSFORMACIONES ENTRE SISTEMAS CARTOGRÁFICOS CON ARCGIS 



por: INGENIERO TOPOGRÁFICO ROBIN ALEXIS OLAYA 



Share:

martes, 29 de abril de 2014

SIG-YURY soluciones ING. TOPOGRAFICA : TRABAJAR CON EL MOTOR DE ETIQUETADO DE MAPLEX

SIG-YURY soluciones ING. TOPOGRAFICA : TRABAJAR CON EL MOTOR DE ETIQUETADO DE MAPLEX: TRABAJAR CON EL MOTOR DE ETIQUETADO DE MAPLEX Continuamente los Ingenieros Topógrafos y Agrimensores tenemos un arduo trabajo en la...
Share:

TRABAJAR CON EL MOTOR DE ETIQUETADO DE MAPLEX




TRABAJAR CON EL MOTOR DE ETIQUETADO DE MAPLEX

Continuamente los Ingenieros Topógrafos y Agrimensores tenemos un arduo trabajo en la elaboración de mapas temáticos con distintos etiquetas y con el etiquetado Estándar Label Engine del ArcGIS no es posible realizar etiquetados avanzados Por lo que es una buena solución el Maplex Label Engine que soluciona los problemas de etiquetado. La cual se configura en:

Al utiliza el Motor de etiquetado Maplex, podrá acceder a un nuevo conjunto de propiedades de ubicación de etiqueta que le permitirán controlar lo siguiente:
Cómo se orientarán y se colocarán las etiquetas
Cómo se les dará formato a las etiquetas
Cómo se colocarán las etiquetas en zonas congestionadas
Cómo resolverá ArcMap los conflictos entre etiquetas
Además de los tipos de entidad estándar, el Motor de etiquetado de Maplex proporciona opciones de ubicación de etiqueta para entidades como calles, curvas de nivel, ríos, límites y parcelas de suelo.
 la cual se tiene que configurar también en el DATA FRAME

¿Qué es el Motor de etiquetado Maplex?
Las etiquetas que están bien colocadas, permiten que el mapa resulte más comprensible y útil. El motor de etiquetado de Maplex ofrece un conjunto especial de herramientas que permite mejorar la calidad de las etiquetas del mapa. Con el Motor de etiquetado Maplex puede definir parámetros para controlar el posicionamiento y tamaño de las etiquetas; así, el Motor de etiquetado Maplex utiliza estos parámetros para calcular la mejor ubicación de todas las etiquetas del mapa. Puede asignar también distintos niveles de importancia a las entidades con el fin de asegurarse de que las entidades más importantes se etiquetan antes que las menos importantes.
El Motor de etiquetado Maplex permite controlar cómo se colocarán las etiquetas con respecto a las entidades, cómo se pueden modificar o reducir las etiquetas con el fin de colocar más etiquetas cuando el espacio disponible está restringido y cómo se resuelven los conflictos entre etiquetas.
El Motor de etiquetado Maplex proporciona lo siguiente:
·         Estilos de colocación avanzada para polígonos entre los que se incluyen los estilos que representan parcelas de suelo, ríos y límites
·         Colocación especial para líneas que representan calles, ríos y entidades de curvas de nivel
·         Capacidad para desplazar las etiquetas respecto a las entidades
·         Repetición de etiquetas a una distancia específica a lo largo de una línea y dentro de un polígono
·         Control del espaciado de palabras y caracteres
·         Alineamiento de las etiquetas respecto a la retículas de proyección
·         Control de las zonas de ubicación de etiquetas
·         Colocación flexible para permitir que quepan más etiquetas en un área
·         Control preciso del apilado de etiqueta
·         Abreviatura y truncado de etiqueta
·         Parámetros de reducción de fuente para áreas congestionadas
·         Control de si la etiqueta puede sobrepasar una entidad
·         Ponderación mejorada de las entidades para determinar la ubicación de las etiquetas
·         Control del tamaño mínimo de entidad que se etiquetará
·         Colocación de las etiquetas como texto de fondo
·         Tolerancia de búsqueda para eliminar etiquetas duplicadas
·         Capacidad para conectar entidades de línea para el etiquetado
·         Numeración clave
·         Capacidad para controlar el orden en que se aplican las estrategias de ajuste de etiquetas
mas información en la pagina del ESRI http://resources.arcgis.com/es/help/main/10.1/index.html#/na/00s80000007m000000/
POR: SIG-YURY SOLUCIONES
Share:

lunes, 28 de abril de 2014

FUGA DE CEREBROS DEL PERÚ




FUGA DE CEREBROS DEL PERÚ

Muchos países en desarrollo están perdiendo un alto porcentaje de sus profesionales altamente cualificados, la migración de estos especialistas tiene un fuerte impacto en posibilidades de desarrollo de estas naciones, pues en muchos casos la salida de los jóvenes talentos es permanente.

Para muchos esta tendencia de movilización poblacional alrededor del mundo se ha convertido en parte de una guerra en la que las naciones desarrolladas buscan atraer y mantener a talentos extranjeros para impulsar su economía. 

En esta edición de La Gran Historia discutiremos el impacto de la llamada fuga de cerebros en Perú, especialmente en área científica y tecnológica, campo en el que el gobierno ha empezado a esforzarse para ofrecer mayores oportunidades y atraer a los profesionales peruanos, altamente especializados, que salieron su tierra natal en busca de mejores opciones académicas y laborales.


Share:

miércoles, 2 de abril de 2014


Share:

ING. EFRAIN YURY TURPO CAYO

ING. EFRAIN YURY TURPO CAYO
ING. EFRAIN YURY TURPO CAYO
Con la tecnología de Blogger.

CIENTÍFICOS PERUANOS

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *