Índice del Foro www.mediocad.com www.mediocad.com
TODO SOBRE MICROSTATION. MDL, MVBA, MACROS.
 
 F.A.Q.F.A.Q.   BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   ConectarseConectarse 

Conseguir Lat/Lon de una coordenada

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
viceri83



Registrado: 30 Ago 2011
Mensajes: 26
Ubicación: Mexico DF

MensajePublicado: Vie Nov 04, 2011 8:27 pm    Título del mensaje: Conseguir Lat/Lon de una coordenada Responder citando

Hola medio, aqui estoy de nuevo molestando por ayuda.

Quisiera saber si hay algun metodo o forma de conseguir mediante vba que en vez de que microstation V8 2004 08.05.02.35 me de las coordenadas (x,y) de un vertice, me de (lat/lon) algo asi como:

Código:

dim overtice() as point3d
dim oenum     as ElementEnumerator

overtice = oenum.current.asLineElement.getvertices

no se si cambiando el tipo de variable de punto ya que no necesito x,y si no lat/lon... no si se pueda hacer pero, de antemano gracias.
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Lun Nov 07, 2011 8:00 am    Título del mensaje: No se puede Responder citando

Hola,

Pues que yo sepa no te devuelve ese dato que tu buscas. MicroStation mide distancias en el espacio cartesiano proyectado.
Creo que en Bentley Maps si puedes hacer y medir sobre un elipsoide, por ejemplo. Tendrás que crearte un algoritmo que te pase de UTM a Geográficas.

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
viceri83



Registrado: 30 Ago 2011
Mensajes: 26
Ubicación: Mexico DF

MensajePublicado: Lun Nov 07, 2011 6:43 pm    Título del mensaje: Responder citando

Gracias Medio..te cuento:

Durante el fin de semana me puse a investigar y al parecer tienes razón, y no hay forma de obtener este dato, por lo menos no de manera tan simple en Microstation V8 2004.... Entonces investigando como pasar de UTM a geográficas encontré unas formulas, que al pasarlas a código, son al rededor de 30 operaciones para obtener la Latitud y Longitud, y todo esto para que??

Bueno trabajo para una empresa que se dedica a Crear Cartografia para la dependencia que lo solicite, para poder revisar la cartografía dependemos de imágenes tomadas en campo a las propiedades, orto fotos y demás, pero aquellas que no se obtuvieron las buscamos en Google Earth street view, nos es un poco difícil encontrar una dirección especifica en Google, asi que utilizabamos el Microstation Xm para mandar nuestra cartografia a G_E, pero es un poco incomodo y molesto, asi que me puse a investigar la manera de interconectar v8 2004 con G_E o de menos con Maps, y revisando las API de Google vi los codigos para crear los Kml y resulta que es simple programacion xml y java, asi que pense en crear elementos directamente sobre google desde Microstation V8 y sorpresa funciono, cree una pequeña rutina en vba en la que desde V8 Seleccionas textos en niveles especificos ya sea con un fence o con el selector y mediante arreglos de areas creo poligonos directo en google earth como sei fuera un Modelo 3D esto solo funciona por ahora con los niveles especificos con los que trabajamos aqui, pero ya estoy desarrollando algo similar a lo que hace el xm, para mandar cualquier linea y /o texto que se desee..te dejo unas capturas de como funciona...

Desde Microstation V8 2004:
http://bayimg.com/gakiLaadN

Ya en Google Earth:
http://bayimg.com/gaKioAadN

Mas de cerca V8:
http://bayimg.com/HAKiIAADN

Resultado Earth:
http://bayimg.com/hAKILaADN

Un saludo y gracias.
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Mar Nov 08, 2011 8:07 am    Título del mensaje: Está muy bien Responder citando

Hola,

Te ha quedado genial y en las imágenes se ve perfectamente la conexión MS y Google. Queda perfecto.

Entonces, ¿Has aplicado los algoritmos para pasar de UTM a Geográficas? Podías poner el código y lo paso al apartado de código MVBA para que le pueda servir de ayuda a otras personas.

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
viceri83



Registrado: 30 Ago 2011
Mensajes: 26
Ubicación: Mexico DF

MensajePublicado: Mar Nov 08, 2011 5:53 pm    Título del mensaje: Codigo UTM -Geograficas Responder citando

Oie que crees me surgio otra duda al momento de seguir con el codigo de google-v8... Quisiera saber si sabes como separar los elementos complejos en lineas, por ejemplo yo escaneo el archivo y empiezo con las coordenadas de las lineas, para los textos ocupo "astextelement.drop" y lo asigno a un enumerador, y asi separo el texto en lineas independientes, pero en el caso de elementos como elipses, shapes o linestring no se como separarlos en lineas independientes, no se si puedas ayudarme con eso...

Ahh y aqui esta el codigo:

ay que declarar las siguientes constantes
Código:

Const pi                As Double = 3.14159265358979
Const e                 As Double = 2.71828182845905


Este es el codigo de la funcion:

Código:

Public Function Utm2Geo(x As Double, Y As Double) As Double()

    Dim SMayor      As Double 'Constante wgs84 zona 14
    Dim SMenor      As Double 'Constante wgs84 zona 14
    Dim zone        As Long   'Constante wgs84 zona 14
    Dim Ex          As Double
    Dim Ex2         As Double
    Dim Ex2c        As Double
    Dim Rc          As Double
    Dim Apl         As Double
    Dim Lambda      As Double
    Dim Phi         As Double
    Dim Ny          As Double
    Dim A           As Double
    Dim A1          As Double
    Dim A2          As Double
    Dim J2          As Double
    Dim J4          As Double
    Dim J6          As Double
    Dim Alfa        As Double
    Dim Beta        As Double
    Dim Gamma       As Double
    Dim b           As Double
    Dim bphi        As Double
    Dim Sigma       As Double
    Dim Xi          As Double
    Dim Eta         As Double
    Dim Tau         As Double
    Dim Sen_h_Xi    As Double
    Dim DeltaLambda As Double
    Dim lat_lon()     As Double  'Array para las coordenadas

    ReDim lat_lon(2)
'********************************CONSTANTES**********************************
'Estos datos pueden ser sustituidos por los de cualquier proyeccion de las que provengan las coordenadas...buscar en internet
    zone = 14
    SMayor = 6378137#
    SMenor = 6356752.31424518
'********************************CONSTANTES**********************************

'============================================================================
'========================Calculo de las Constantes===========================
'============================================================================
    Ex = Sqr(SMayor ^ 2 - SMenor ^ 2) / SMayor
    Ex2 = Sqr(SMayor ^ 2 - SMenor ^ 2) / SMenor
    Ex2c = Ex2 ^ 2
    Rc = (SMayor ^ 2) / SMenor
    Apl = (SMayor - SMenor) / SMayor

    Lambda = zone * 6 - 183
    x = x - 500000

'============================================================================
'==============Aplicacion de las ecuaciones Coticchia-Surace=================
'============================================================================
    Phi = Y / (6366197.724 * 0.9996)
    Ny = (Rc / (1 + Ex2c * (Cos(Phi)) ^ 2) ^ (1 / 2)) * 0.9996
    A = x / Ny
    A1 = Sin(2 * Phi)
    A2 = A1 * (Cos(Phi)) ^ 2
    J2 = Phi + (A1 / 2)
    J4 = (3 * J2 + A2) / 4
    J6 = (5 * J4 + A2 * (Cos(Phi)) ^ 2) / 3
    Alfa = (3 / 4) * Ex2c
    Beta = (5 / 3) * Alfa ^ 2
    Gamma = (35 / 27) * Alfa ^ 3
    bphi = 0.9996 * Rc * (Phi - Alfa * J2 + Beta * J4 - Gamma * J6)
    b = (Y - bphi) / Ny
    Sigma = ((Ex2c * A ^ 2) / 2) * (Cos(Phi)) ^ 2
    Xi = A * (1 - Sigma / 3)
    Eta = b * (1 - Sigma) + Phi
    Sen_h_Xi = ((e ^ Xi) - (e ^ (-Xi))) / 2
    DeltaLambda = ArcTan(Sen_h_Xi / Cos(Eta))
    Tau = ArcTan(Cos(DeltaLambda) * Tan(Eta))

'********************************Longitud**********************************
    lat_lon(1) = (DeltaLambda / pi * 180) + Lambda

'********************************Latitud**********************************
    lat_lon(0) = (Phi + (1 + Ex2c * (Cos(Phi)) ^ 2 - (3 / 2) * Ex2c * Sin(Phi) * Cos(Phi) * (Tau - Phi)) * (Tau - Phi)) / pi * 180

    Utm2Geo = coord
End Function

'**********************************************************************************
' Calcula la Cotangente inversa
'**********************************************************************************
Public Function ArcTan(ByVal x As Double) As Double
    ArcTan = Atn(x)
End Function
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
viceri83



Registrado: 30 Ago 2011
Mensajes: 26
Ubicación: Mexico DF

MensajePublicado: Jue Nov 10, 2011 4:46 am    Título del mensaje: Resuelto y listo Google-V8 Responder citando

Resuelto el problema

Te cuento:

Al final, logre resolver el problema de el codigo y el resultado quedo muy similar a lo que hace export google earth en Xm.

Lo que hice fue que al dropear un texto y asignarlo a un enumerador, puedes obtener dos resultados, elementos linestring o cell header, lo que hago es que al encontrar shapes o linestring recorro los vertices y los mando al programa de utm2geo, con el caso de cell header, lo dropeo de nuevo y consigo los linestring y repito el proceso, y con los ellipses mando un asEllipseElement.ConstructVerteLlist y recorro los vertices..

Al final el programa es funcional en cuanto a enviar los graficos a Google Earth, las unicas limitaciones que tengo aun, es que solo se puede hacer con elementos existentes en el grafico, no con referencias como en xm espero resolverlo pronto,y funciona hasta el momento con elementos que sean de tipo:

Linestring
Line
Text
Textnode
Cell
Ellipses

y con una limitante de los 10 colores basicos, ya que no se comoobtener el hexadecimal de los colores para mandarlo al kml, pero aun asi, funciona de maravilla.

Gracias por tu ayuda. Un saludo

Pd. Luego publicare algunas capturas de pantalla en cuanto termine de pulir los detalles minimos de el formulario y las diversas opciones que pienso introducir, como la opcion de mandarlo en 3d...
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Jue Nov 10, 2011 9:08 am    Título del mensaje: Soluciones Responder citando

Hola,

me alegra que todo vaya saliendo bien. Respecto a los colores, no los he tratado mucho pero creo que no hay función que devuelva el hexadecimal del color del elemento.

Puedes obtener el RGB y después, mediante código, el hexadecimal.

Con la siguiente función podrás obtener el HEXA desde un RGB tipo (255,255,255):

Código:
Private Sub cmdrgbtohex_Click()
    Dim num(0 To 3)
    Dim pos1, pos2
    RGB_Color = Text2.Text
     '255,255,255
    contador = 1
    Do
        pos1 = InStr(RGB_Color, ",")
        If pos1 = 0 Then
            num(contador) = (RGB_Color)
        Else
            num(contador) = Mid(RGB_Color, 1, pos1 - 1)
        End If
        RGB_Color = Mid(RGB_Color, pos1 + 1, Len(RGB_Color))
        contador = contador + 1
    Loop Until pos1 = 0
   
    r = Val(num(1))
    g = Val(num(2))
    b = Val(num(3))
    txtResult.BackColor = RGB(r, g, b)
   
 
    'get the r value
    If r <16 Then hex1 = 0 & Hex(r) Else hex1 = Hex(r)
    'get the g value
    If r <16 Then hex2 = 0 & Hex(g) Else hex2 = Hex(g)
    'get the b value
    If b <16 Then hex3 = 0 & Hex(b) Else hex3 = Hex(b)
   
    txtResult.Text = "#" & hex1 & hex2 & hex3
End Sub

Mira a ver si te funciona.

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
viceri83



Registrado: 30 Ago 2011
Mensajes: 26
Ubicación: Mexico DF

MensajePublicado: Jue Nov 10, 2011 7:43 pm    Título del mensaje: Colores resuelto Responder citando

Gracias por el dato medio

Me funciono de maravilla, solo habia que adaptarlo al codigo, ya que parecia de un formulario, pero quedo genial, solo tuve que transformar el color de indice de microstation a RGB y luego a hexadecimal, y acomodarlo de manera que representara BGR que es el formato de color de G_E, ademas de añadir el canal alpha.

Pero ya quedo ahora trabaja con todos los colores.

Gracias
Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA Todas las horas están en GMT + 1 Hora
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by phpBB © 2001, 2005 phpBB Group