You are here:GeoTux»Geo-Foros»Botón Medir Distancias (VB.NET + MapWindow Gis)

Estadísticas

Invitados: 115
Usuarios registrados: 3232
Usuarios en línea:
-
Registrados hoy:
-

Registro

Redifusión (RSS)

Blogs y Noticias:
Recibe las actualizaciones en Geo-Noticias y Geo-Blogs

Recibir por e-mail
Recibir Geo-Noticias y Geo-Blogs por e-mail

¿Qué es esto?

Welcome, Guest
Username Password: Remember me

Botón Medir Distancias (VB.NET + MapWindow Gis)
(1 viewing) (1) Guest
  • Page:
  • 1

TOPIC: Botón Medir Distancias (VB.NET + MapWindow Gis)

Botón Medir Distancias (VB.NET + MapWindow Gis) 25 Abr 2013 12:46 #951

Estimados,

Estoy intentando hacer un botón que me permita medir distancias en un visor creados con VB.NET apoyado en MapWindow GIS. El botón funciona perfectamente, pero me da unos valores de distancias rarísimos (Barcelona-Madrid = 4500 km).

Este es el código:

Private Sub btMedir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btMedir.Click
'Lo quedamos APTO para comenzar el proceso de medición
Midiendo = True
'Anulamos el resto de botones
btAumentarZoom.Checked = False
btReducirZoom.Checked = False
btMoverImagen.Checked = False
btInformacion.Checked = False
'Escogemos el tipo de cursor
Mapa.MapCursor = MapWinGIS.tkCursor.crsrCross
'La propiedad SendMouseDown se refiere a cuando el puntero del ratón está sobre un elemento y además el ratón está presionado, es decir cuando seleccionamos el punto de origen de la distancia que queremos medir
Mapa.SendMouseDown = True
End Sub
'En el evento MouseDownEvent (explicado un poco más arriba)ordenamos que nos saque el punto inicial y la distancia en texto
Private Sub Mapa2_MouseDownEvent(ByVal sender As System.Object, ByVal e As AxMapWinGIS._DMapEvents_MouseDownEvent) Handles Mapa.MouseDownEvent
If Midiendo = True Then
Mapa.SendMouseUp = True
If PuntoInicial Is Nothing Then
PuntoInicial = New MapWinGIS.Point
MideIni = Control.MousePosition
End If
TextDist.Text = " "
End If
End Sub
'Aquí se explica lo que pasa dentro del evento de mover el ratón
Private Sub Mapa2_MouseMoveEvent(ByVal sender As Object, ByVal e As AxMapWinGIS._DMapEvents_MouseMoveEvent) Handles Mapa.MouseMoveEvent
'Calculamos posición del cursor en latitud y longitud
'Dim Lat, Lon As Double
Dim KmX, KmY, Dist As Double
Mapa.PixelToProj(e.x, e.y, Lon, Lat)
If Midiendo = True Then
If PuntoInicial Is Nothing Then Exit Sub
' Por simplificar se ha empleado el teorema de Pitágoras y trigonometría plana, sin considerar la proyección de nuestro Shape.
' Este método no es nada riguroso, los resultados obtenidos son sólo aproximados
'Haciendo esto tenéis el aprobado asegurado, para sacar el notable (7 puntos) hay que mejorar estas 4 líneas de código para que la medición sea más precisa, no daré ninguna pista al respecto
KmY = Math.Abs(Lat - PuntoInicial.y) * 111.12
KmX = Math.Abs(Lon - PuntoInicial.x) * 111.12 * Math.Cos(Lat * Math.PI / 180)
Dist = Math.Sqrt(KmX ^ 2 + KmY ^ 2)
TextDist.Text = "Distancia Medida: " & Math.Round(Dist, 1) & " km."
If EstoyMidiendo Then
'Borramos la líne anterior
ControlPaint.DrawReversibleLine(MideIni, MideFin, Color.FromArgb(245, 230, 200))
End If
'Dibujamos la nueva línea
MideFin = Control.MousePosition
ControlPaint.DrawReversibleLine(MideIni, MideFin, Color.FromArgb(245, 230, 200))
EstoyMidiendo = True
End If
End Sub
'El evento de levantar el puntero del ratón, es decir cuando ya hemos seleccionado el punto final de la medición
Private Sub Mapa2_MouseUpEvent(ByVal sender As Object, ByVal e As AxMapWinGIS._DMapEvents_MouseUpEvent) Handles Mapa.MouseUpEvent
If Midiendo = True Then
PuntoInicial = Nothing
If EstoyMidiendo Then
'Borrar ultima línea
ControlPaint.DrawReversibleLine(MideIni, MideFin, Color.FromArgb(245, 230, 200))
EstoyMidiendo = False
End If
End If
End Sub


¿Qué estoy haciendo mal?


Un saludo y muchas gracias a todos

Manolo from Navezuelas
  • Page:
  • 1
Time to create page: 0.51 seconds
 

¿Dónde nos leen?

Usuario aleatorio

Últimos Geo-Foros

No posts to display.

Últimos comentarios