gpt4 book ai didi

ios - 适合 MKMapView 部分的注释

转载 作者:行者123 更新时间:2023-11-29 13:18:04 28 4
gpt4 key购买 nike

我得到了 MKMapView 和一些注释。我使用下一个代码来显示所有注释:

NSArray *coordinates = [self.mapView valueForKeyPath:@"annotations.coordinate"];

CLLocationCoordinate2D maxCoord = {-90.0f, -180.0f};
CLLocationCoordinate2D minCoord = {90.0f, 180.0f};
for(NSValue *value in coordinates) {
CLLocationCoordinate2D coord = {0.0f, 0.0f};
[value getValue:&coord];
if(coord.longitude > maxCoord.longitude) {
maxCoord.longitude = coord.longitude;
}

if(coord.latitude > maxCoord.latitude) {
maxCoord.latitude = coord.latitude;
}

if(coord.longitude < minCoord.longitude) {
minCoord.longitude = coord.longitude;
}

if(coord.latitude < minCoord.latitude) {
minCoord.latitude = coord.latitude;
}
}

MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center.longitude = (minCoord.longitude + maxCoord.longitude) / 2.0;
region.center.latitude = (minCoord.latitude + maxCoord.latitude) / 2.0;
region.span.longitudeDelta = (maxCoord.longitude - minCoord.longitude) * 1.5;
region.span.latitudeDelta = (maxCoord.latitude - minCoord.latitude) * 1.5;

[self.mapView setRegion:region animated:YES];

此代码将所有注释居中 - 完美。但是,如果我想在 map 的右半部分添加注释怎么办?有什么办法吗?

现在是这样的:

image

这里是我想要实现的:

image

最佳答案

如果您的目标区域始终位于左侧或右侧(即仍然允许全高),那么这很容易,您只需要计算出您区域的边界即可。

假设您希望图钉位于页面的右侧四分之一处。这意味着您需要告诉 map 查看比 pin 区域大 4 倍(targetspan/currentspan)的区域,并且该区域的中间向左移动 1.5x((targetspan-currentspan)/2)的宽度地区。 (我打算坐纬度是从 0 到 1,但实际上你只是使用你已经计算过的东西)

想象一下,将 View 分成四个垂直 strip ,将有 5 条线。屏幕左边是0,下一行是1,中间是2,下一个是3,最后一个是4。您希望图钉位于第 3 行和第 4 行之间,这意味着您在上面计算的经度跨度为 1 个单位宽,center.longitude 为 3.5。

您有一个区域 ((3.5,0.5), (1,1)),您需要让您的 map 缩放到该区域 ((2,0.5),(4,1))。因此,获取 longitudeDelta,将其乘以 1.5,然后从 center.longitude 中减去它,即您的新 objective-c enter.longitude。然后将 longitudeDelta 乘以 4,这就是您的新 longitudeDelta。

您可以在小范围内对纬度做类似的事情,但在大范围内,计算需要考虑 map 投影,这意味着赤道附近的像素比两极附近的像素代表更多的土地。

关于ios - 适合 MKMapView 部分的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com