PowerApps es sinónimo de formularios, automatizaciones y datos… pero también puede ser una ventana al mundo físico. Literalmente.
Imagina que estás desarrollando una app para técnicos de campo, repartidores o personal de inspección. ¿Y si pudieras registrar desde dónde se envían los datos? ¿Y si pudieras validar que están realmente en el sitio correcto? ¿O incluso generar mapas en tiempo real con las visitas realizadas?
En esta entrada te cuento:
- Qué es y cómo funciona la geolocalización en PowerApps
- Un ejemplo real: registrar visitas con ubicación
¿Qué es la función Location en PowerApps?
PowerApps nos da acceso a la posición del usuario a través del objeto Location, que incluye:
Location.Latitude
Location.Longitude
Location.Altitude
Este objeto se actualiza automáticamente mientras la app está abierta (siempre que el usuario haya dado permiso para acceder a la ubicación). Es una forma rápida y sencilla de obtener la geolocalización sin conectores premium ni integraciones externas.
Caso práctico: registrar una visita con ubicación
Veamos un caso típico:
Trabajas con un equipo comercial o técnico que realiza visitas presenciales a clientes, obras o puntos de control. El requisito, en apariencia, es sencillo:
“Necesitamos registrar la visita en el momento y lugar en que ocurre.”
Es decir, nada de rellenar el formulario desde casa al final del día. Nada de “ya lo anoto luego con calma”. La ubicación importa, y el contexto en tiempo real marca la diferencia.
¿Cómo lo resolvemos?
Paso 1: Crear una tabla de visitas
Puedes usar Dataverse, SharePoint o cualquier fuente de datos donde tengas permisos de escritura. La estructura mínima sería:
| Campo | Tipo de dato |
|---|---|
| Propietario | Usuario |
| FechaHora | Fecha/Hora |
| Latitud | Decimal |
| Longitud | Decimal |
Tanto la longitud como la latitud deberíamos guardarlas con formato decimal, cuántos más dígitos tenga, más exacta será la ubicación a registrar:

Paso 2: Agregar la lógica a PowerApps
Abre el editor de PowerApps Studio, y agrega la tabla que acabas de crear como origen de datos:

Agrega un botón para registrar la visita que tenga la siguiente fórmula:

Patch(
'Sales visits',
Defaults('Sales visits'),
{
Name: "test",
Latitude: Location.Latitude,
Longitude: Location.Longitude
}
)
Esto crea un nuevo registro con el nombre del usuario, la hora exacta y su posición al pulsar el botón:

Geofencing (validación por zonas)
Ahora imaginemos que queremos construir una aplicación, donde añadamos a una ubicación específica un rango de tolerancia para verificar si el usuario está cerca del punto esperado. En base a eso, podríamos deshabilitar el botón de visita si el usuario no se encuentra cerca de la ubicación deseada.
¿Cómo podemos hacer esto en PowerApps?
Antes de comenzar debemos entender la fórmula del semiverseno. Se trata de una fórmula que es utilizada para calcular la distancia entre dos puntos en el globo terráqueo cuando conocemos su latitud y longitud. Tiene la siguiente representación:

Lo sé, tú tampoco has entendido nada ¿verdad? No creas que yo sí, por suerte, tenemos a nuestro buen amigo ChatGPT para traducirnos esto en lenguaje poweplatforniano:
// Reference coordinates (e.g., client location)
Set(varLatReference, 28.123456);
Set(varLonReference, -15.654321);
// Haversine formula to calculate distance in meters
Set(
varDistance,
6371000 *
Acos(
Cos(Radians(varLatReference)) *
Cos(Radians(Location.Latitude)) *
Cos(Radians(Location.Longitude - varLonReference)) +
Sin(Radians(varLatReference)) *
Sin(Radians(Location.Latitude))
)
)
Puedes añadir esta lógica donde desees, en la propiedad on visible de la pantalla, justo antes de hacer el submit o incluso en la propiedad DisplayMode de tu botón de submit. En mi caso, voy a optar por esta última opción.
Primeramente añadiremos una etiqueta de texto para mostrar en pantalla la distancia actual con respecto al punto de referencia indicado en la fórmula:
With(
{
// Reference coordinates (e.g., client location)
varLatReference: 28.486112,
varLonReference: -16.393950
},
// Haversine formula to calculate distance in meters
With(
{
varDistance:
6371000 *
Acos(Cos(Radians(varLatReference)) *
Cos(Radians(Location.Latitude)) *
Cos(Radians(Location.Longitude - varLonReference)) +
Sin(Radians(varLatReference)) *
Sin(Radians(Location.Latitude)))
},
"Distance: " & varDistance & If(varDistance <100, "✅Inside allowed area", "❗Outside allowed area")
)
)
Como podéis observar, actualmente me encuentro a unos 83 metros del punto de referencia que hemos indicado en la fórmula (Latitud = 28,486112, Longitud = -16,393950):

Ahora sólo nos faltaría llevarnos esta lógica a la propiedad DisplayMode del botón:
With(
{
// Reference coordinates (e.g., client location)
varLatReference: 28.486112,
varLonReference: -16.393950
},
// Haversine formula to calculate distance in meters
With(
{
varDistance:
6371000 *
Acos(Cos(Radians(varLatReference)) *
Cos(Radians(Location.Latitude)) *
Cos(Radians(Location.Longitude - varLonReference)) +
Sin(Radians(varLatReference)) *
Sin(Radians(Location.Latitude)))
},
If(varDistance <100, DisplayMode.Edit, DisplayMode.Disabled)
)
)
A continuación muestro dos ejemplos de cómo se vería la aplicación cuando estás dentro del área especificado o no:
✅Dentro del área:

❗Fuera del área:

Añadir un mapa para visualizar localizaciones
PowerApps puede introducir mapas para visualizar localizaciones, para ello, busque “mapa” en la sección de Insertar.

Este control tiene algunas propiedades interesantes para mostrar ubicaciones:
Propiedad: Items
Estableceremos un array con la localización actual y la localización de la visita comercial, de la siguiente manera:

[
{
Name: "CurrentLocation",
Latitude: Location.Latitude,
Longitude: Location.Longitude
},
{
Name: "VisitLocation",
Latitude: 28.486912,
Longitude: -16.393950
}
]
Propiedad: ItemsLabels
La estableceremos de la siguiente manera:

Propiedad: ItemsLatitudes e ItemsLongitude


Como resultado, obtendremos un mapa donde podremos visualizar ambas ubicaciones en el mapa:

En conclusión…
La geolocalización en PowerApps no es magia… pero casi.
Con solo un par de fórmulas puedes construir apps más inteligentes, conectadas al mundo físico y que resuelven necesidades reales, como verificar visitas, registrar ubicaciones o generar contextos automáticos.
Y como siempre, no se trata de hacer apps más complicadas, sino más útiles. A veces, basta con saber dónde estás para tomar mejores decisiones.



Leave a comment