Estoy tratando de hacer la unión entre dos MKCoordinateRegion. ¿Alguien tiene una idea sobre cómo hacer esto?Cómo hacer la unión entre dos MKCoordinateRegion
Respuesta
hay una función que acepta dos MKMapRectUnion
MKMapRects
por lo que primero podría convertir cada MKCoordinateRegion
a un MKMapRect
y luego llamar a esa función (y convertir el resultado a un MKCoordinateRegion
usando la función MKCoordinateRegionForMapRect
).
El método de conversión podría tener este aspecto:
- (MKMapRect)mapRectForCoordinateRegion:(MKCoordinateRegion)coordinateRegion
{
CLLocationCoordinate2D topLeftCoordinate =
CLLocationCoordinate2DMake(coordinateRegion.center.latitude
+ (coordinateRegion.span.latitudeDelta/2.0),
coordinateRegion.center.longitude
- (coordinateRegion.span.longitudeDelta/2.0));
MKMapPoint topLeftMapPoint = MKMapPointForCoordinate(topLeftCoordinate);
CLLocationCoordinate2D bottomRightCoordinate =
CLLocationCoordinate2DMake(coordinateRegion.center.latitude
- (coordinateRegion.span.latitudeDelta/2.0),
coordinateRegion.center.longitude
+ (coordinateRegion.span.longitudeDelta/2.0));
MKMapPoint bottomRightMapPoint = MKMapPointForCoordinate(bottomRightCoordinate);
MKMapRect mapRect = MKMapRectMake(topLeftMapPoint.x,
topLeftMapPoint.y,
fabs(bottomRightMapPoint.x-topLeftMapPoint.x),
fabs(bottomRightMapPoint.y-topLeftMapPoint.y));
return mapRect;
}
Entonces, para hacer realidad la unión:
MKCoordinateRegion region1 = ...
MKCoordinateRegion region2 = ...
MKMapRect mapRect1 = [self mapRectForCoordinateRegion:region1];
MKMapRect mapRect2 = [self mapRectForCoordinateRegion:region2];
MKMapRect mapRectUnion = MKMapRectUnion(mapRect1, mapRect2);
MKCoordinateRegion regionUnion = MKCoordinateRegionForMapRect(mapRectUnion);
que hice una pequeña prueba tanto en 4.3 y 5.0 y parece que la conversión no es correcto
UIImageView *imageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"heart.png"] imageByScalingProportionallyToSize:CGSizeMake(100, 100)]];
imageView.frame = CGRectMake(0, 0, 100, 100);
imageView.center = [mapView convertCoordinate:mapView.centerCoordinate toPointToView:canvasView];
[canvasView addSubview:imageView];
MKCoordinateRegion region = [mapView convertRect:imageView.frame toRegionFromView:canvasView];
MKMapRect maprect;
for (int i = 0; i < 5; i ++)
{
maprect = [mapView mapRectForCoordinateRegion:region];
NSLog(@"%f, %f, %f, %f", region.center.latitude, region.center.longitude, region.span.latitudeDelta, region.span.longitudeDelta);
NSLog(@"%f, %f, %f, %f", maprect.origin.x, maprect.origin.y, maprect.size.width, maprect.size.height);
region = MKCoordinateRegionForMapRect([mapView mapRectForCoordinateRegion:region]);
}
14,718256, -40.078125, 63.837150, 70,312500
78118912,000000, 94.811.514,406252, 52.428.800,000000, 52428799,999997
17,416993, -40.078125, 63.837150, 70,312500
78118912,000000, 91.803.983,982924, 52.428.800,000000, 53344239,567355
20,649080, -40.078125, 63.837150, 70.312500
78.118.912,000000, 87.976.363,978412, 52.428.800,000000, 54699220,734715
24,548345, -40.078125, 63.837150, 70,312500
78118912,000000, 82962597.189840, 52.428.800,000000, 56765991.576236
29,305644, -40.078125, 63.837150, 70,312500
78118912,000000, 76.093.086,024249, 52.428.800,000000, 60073659,997575
Si alguien está buscando un equivalente rápida usando extensiones,
extension MKCoordinateRegion {
func mapRectForCoordinateRegion() -> MKMapRect {
let dLat = span.latitudeDelta/2.0
let dLon = span.longitudeDelta/2.0
let topLeft = MKMapPointForCoordinate(
CLLocationCoordinate2DMake(center.latitude + dLat, center.longitude - dLon))
let botRight = MKMapPointForCoordinate(
CLLocationCoordinate2DMake(center.latitude - dLat, center.longitude + dLon))
return MKMapRectMake(
topLeft.x,
topLeft.y,
fabs(botRight.x - topLeft.x),
fabs(botRight.y - topLeft.y))
}
func unionWith(region: MKCoordinateRegion) -> MKCoordinateRegion {
let union = MKMapRectUnion(
self.mapRectForCoordinateRegion(),
region.mapRectForCoordinateRegion())
return MKCoordinateRegionForMapRect(union)
}
}
Y se puede utilizar como
let region1 = ...
let region2 = ...
let regionUnion = region1.unionWith(region2)
- 1. ¿Cómo construyes la unión de dos DFA?
- 2. cómo hacer la operación XOR entre dos cadenas hexadecimales?
- 3. ¿Diferencia entre estos dos enfoques de tabla de unión?
- 4. Diferencia entre unión interna y unión completa
- 5. Cómo unión de dos criterios diferentes MongoId
- 6. ¿Cómo realizar una unión IZQUIERDA en SQL Server entre dos instrucciones SELECT?
- 7. ¿Cómo hacer una animación flip entre más de dos UIViews?
- 8. ¿Cuál es la diferencia entre las dos notaciones de unión SQL?
- 9. SQL: unión interna de dos tablas masivas
- 10. Calcular unión de dos formas arbitrarias
- 11. Get topLeft y bottomRight de MKCoordinateRegion MKMapView
- 12. Ayuda de asignación: unión entre conjuntos
- 13. ¿Cómo se hace una unión de dos tablas en NHibernate?
- 14. Encontrar la intersección entre dos columnas
- 15. ¿Cómo encuentro la distancia entre dos puntos?
- 16. Cómo eliminar la relación entre dos entidades
- 17. ¿Cómo encontrar la diferencia entre dos cadenas?
- 18. Cómo obtener la distancia entre dos divs
- 19. cómo encontrar la distancia entre dos geopoints?
- 20. ¿Cómo combino dos consultas (unión de todo) en una fila?
- 21. Unión de dos o más (hash) mapea
- 22. ¿Posición entre dos puntos?
- 23. ¿Cómo hacer una unión externa completa en Linq?
- 24. ¿Cómo hacer IZQUIERDA UNIÓN en LINQ a Entidades?
- 25. ¿La manera más simple de hacer una auto-unión recursiva?
- 26. Cómo hacer unión, intersección, diferencia e invertir datos en java
- 27. Únete entre la tabla de mapeo (unión) con cardinalidad específica
- 28. Obtener la distancia entre dos puntos geográficos
- 29. ¿Cómo aplicar la transición 3D entre dos actividades en Android?
- 30. ¿Cómo comunicarse entre dos ventanas del navegador?
Ese wa Es exactamente lo que estaba buscando, muchas gracias – foux