MapKit + SwiftUI (Parte 2 de 8)1

Explorando MapKit en SwiftUI

2

Cómo referenciar lugares con Place ID

3

Seleccionar marcadores y anotaciones de MapKit en SwiftUI

4

Overlays con MapKit y SwiftUI

5

Cómo interactuar con MapFeature en SwiftUI

6

Cómo configurar controles de un mapa con MapKit y SwiftUI

7

Explorando lugares con LookAroundPreview

8

Mostrar datos de un lugar con Place Card

Cómo referenciar lugares con Place ID

Place ID es un identificador único que se utiliza para referenciar lugares como parques, tiendas, museos, entre otros.

La ventaja de Place ID frente a otras opciones para indicar la ubicación de un lugar, como direcciones o coordenadas, es que este no cambia aunque el lugar lo haga. Por ejemplo, tu restaurante favorito puede cambiar de dirección o coordenadas en cualquier momento, pero su Place ID seguirá siendo el mismo. Esto es posible porque Apple, a través de Place ID, realiza un seguimiento de los datos del lugar, asegurando que siempre tengas la información más actualizada, como coordenadas o dirección.

Un Place ID solo deja de ser válido cuando el lugar deja de existir, por ejemplo, si tu restaurante favorito ha cerrado. Al igual que las coordenadas y las direcciones, los Place IDs se pueden compartir entre aplicaciones, y estas harán referencia al mismo lugar.

El Place ID se representa en la propiedad identifier de la clase MKMapItem:

var identifier: MKMapItem.Identifier? { get }

Cómo buscar un Place ID

Existen tres formas para buscar un Place ID, estas son: Place ID Lookup, MKLocalSearch y Apple Server Maps API.

Place ID Lookup

La forma más fácil de encontrar el identificador de un lugar es a través de Place ID Lookup, una web proporcionada por Apple para buscar identificadores de lugares. Ejemplo:

Place ID Lookup website

MKLocalSearch

MKLocalSearch es una clase que se utiliza para buscar lugares o direcciones en un mapa.

import MapKit
// 1
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = "Kento Nanami"
// 2
let search = MKLocalSearch(request: request)
// 3
let response = try await search.start()
// 4
response.mapItems.forEach {
let identifier = $0.identifier?.rawValue
}
  1. Se define una solicitud de búsqueda con el término "Kento Nanami".
  2. Se crea una instancia de MKLocalSearch basada en la solicitud especificada.
  3. Se inicia la búsqueda de forma asíncrona. Si la búsqueda es exitosa, se obtiene una respuesta de tipo MKLocalSearch.Response, que contiene los resultados.
  4. Para cada lugar encontrado, se obtiene el nombre y el identificador del lugar.

Ejemplo: Kento Nanami Memorial: IE2F67531C4B55D01.

Apple Server Maps API

Usando Apple Server Maps API, puedes obtener el Place ID de un lugar a través de búsquedas específicas, autocompletadas o geocodificadas. Para más información, consulta la documentación de Apple.

Cómo usar un Place ID en un mapa

Busca un lugar usando Place ID Lookup y copia el Place ID. Luego, para mostrar ese lugar en un mapa de SwiftUI usando el identificador, utiliza la siguiente vista de ejemplo:

import SwiftUI
// 1
import MapKit
struct SimpleMapView: View {
// 2
@State private var mapItem: MKMapItem?
var body: some View {
// 3
Map {
// 4
if let mapItem {
Marker(item: mapItem)
}
}
.task { // 5
}
}
}
  1. Se importa el framework MapKit para trabajar con mapas.
  2. Se define la propiedad opcional mapItem de tipo MKMapItem para representar un lugar en el mapa. Se añade el property wrapper @State a mapItem para actualizar el contenido de la vista cuando cambie su valor.
  3. Se define un mapa en el cuerpo de la vista.
  4. Se muestra un marcador en la ubicación representada por mapItem en el mapa, si mapItem no es nulo.
  5. Se añade el modificador task para realizar una tarea asíncrona antes de que la vista se muestre al usuario. De momento, este bloque está vacío, pero se agregará código más adelante.
Vista de SwiftUI mostrando un mapa

Para mostrar el lugar en el mapa utilizando solo el identificador, debes usar la clase MKMapItemRequest. Con esta clase, podrás obtener la información más reciente de un lugar. Añade el siguiente código dentro del modificador task:

// 1
guard let identifier = MKMapItem.Identifier(rawValue: "PLACE_ID") else {
return
}
// 2
let request = MKMapItemRequest(mapItemIdentifier: identifier)
// 3
mapItem = try? await request.mapItem
  1. Se intenta crear un identificador de tipo MKMapItem.Identifier a partir del Place ID. Si no es válido, se retorna sin ejecutar las siguientes líneas de código. Recuerda reemplazar "PLACE_ID" por el Place ID que buscaste previamente.
  2. Si se obtiene un identificador válido, se procede a crear una solicitud de tipo MKMapItemRequest para obtener un MKMapItem asociado al identificador.
  3. Se realiza una solicitud asíncrona para obtener el MKMapItem y se asigna a la propiedad mapItem si la solicitud es exitosa.
Vista de SwiftUI mostrando un mapa con un marcador

Place IDs alternativos

Un lugar puede tener más de un Place ID asignado, lo que significa que múltiples Place IDs pueden referirse a un mismo lugar. Los Place IDs alternativos están representados en la propiedad alternateIdentifiers de la clase MKMapItem:

var alternateIdentifiers: Set<MKMapItem.Identifier> { get }

El valor de la propiedad identifier de MKMapItem puede cambiar con el tiempo. Si necesitas almacenar esta propiedad, se recomienda hacer lo mismo con alternateIdentifiers para poder determinar cuando varios Place IDs hacen referencia a un mismo lugar.

Compatibilidad

  • iOS 18.0+
  • iPadOS 18.0+
  • Mac Catalyst 18.0+
  • macOS 15.0+
  • tvOS 18.0+
  • visionOS 2.0+
MapKit + SwiftUI (Parte 2 de 8)1

Explorando MapKit en SwiftUI

2

Cómo referenciar lugares con Place ID

3

Seleccionar marcadores y anotaciones de MapKit en SwiftUI

4

Overlays con MapKit y SwiftUI

5

Cómo interactuar con MapFeature en SwiftUI

6

Cómo configurar controles de un mapa con MapKit y SwiftUI

7

Explorando lugares con LookAroundPreview

8

Mostrar datos de un lugar con Place Card

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2025 AsyncLearn