Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌地图iOS版-你如何判断一个标记是否在屏幕范围内?_Ios_Google Maps - Fatal编程技术网

谷歌地图iOS版-你如何判断一个标记是否在屏幕范围内?

谷歌地图iOS版-你如何判断一个标记是否在屏幕范围内?,ios,google-maps,Ios,Google Maps,我正试图找出一种简单的方法,在谷歌地图iOS版中确定给定的GMSMarker是否在可见地图的范围内。Javascript API中似乎有解决方案,但除了基于此进行一些复杂的推理之外,似乎没有其他方法。用它检索视口的边界并创建一个新的视口。呼叫,在标记的位置传递。如果标记在视口内,则返回true;如果不在视口内,则返回false。基于Andy有用回答的代码示例: - (void)snapToMarkerIfItIsOutsideViewport:(GMSMarker *)m{ GMSVis

我正试图找出一种简单的方法,在谷歌地图iOS版中确定给定的GMSMarker是否在可见地图的范围内。Javascript API中似乎有解决方案,但除了基于此进行一些复杂的推理之外,似乎没有其他方法。

用它检索视口的边界并创建一个新的视口。呼叫,在标记的位置传递。如果标记在视口内,则返回true;如果不在视口内,则返回false。

基于Andy有用回答的代码示例:

- (void)snapToMarkerIfItIsOutsideViewport:(GMSMarker *)m{
    GMSVisibleRegion region = _mapView.projection.visibleRegion;
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion:region];
    if (![bounds containsCoordinate:m.position]){
        GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:m.position.latitude
                                              longitude:m.position.longitude
                                                   zoom:_mapView.camera.zoom];
        [self.mapView animateToCameraPosition: camera];
    }
}

希望这段代码能对代码搜寻者有所帮助

NSMutableArray *mutArrMarkers; //Have all markers added on Map
.
.
.
.

NSMutableArray *mutArrMarkersInPath = [NSMutableArray array];
[mutArrMarkers enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
   GMSMarker *marker = obj;
   if(GMSGeometryContainsLocation(currentCoordinates, pathToCheck, YES)){
        [mutArrMarkersInPath addObject:marker];
   }
}];

我写过关于GMSMarker是在特定框架下找到的方法。 设置矩形框(x,y,maxX,maxY)。您可以从屏幕上设置任何帧,告诉它“查找标记”是否在该帧中

- (BOOL)isGoogleMapMarkerVisible:(GMSMarker*)marker {

    //Marker point
    CGPoint markerpoint = [self.mapview.projection pointForCoordinate:marker.position];

    //Maximum visible region from x and y axis
    float x = 0.0;
    float y = o.o;
    float maxX = self.mapview.frame.size.width;
    float maxY = self.mapview.frame.size.height;

    //If marker point is on visible region return true else return false
    if (markerpoint.x > x && markerpoint.y > y && markerpoint.x < maxX && markerpoint.y < maxY) {
        return YES;
    }
    else {
            return NO;
    }
}
-(BOOL)是谷歌地图标记可服务的:(GMSMarker*)标记{
//标记点
CGPoint-markerpoint=[self.mapview.projectionpointforcoordinate:marker.position];
//x轴和y轴的最大可见区域
浮动x=0.0;
浮动y=o.o;
float maxX=self.mapview.frame.size.width;
float maxY=self.mapview.frame.size.height;
//如果标记点位于可见区域上,则返回true,否则返回false
if(markerpoint.x>x&&markerpoint.y>y&&markerpoint.x
答案的swift 4版本。如果标记是否在屏幕区域内,则返回布尔值

func isMarkerWithinScreen(marker: GMSMarker) -> Bool {
    let region = self.mapView.projection.visibleRegion()
    let bounds = GMSCoordinateBounds(region: region)
    return bounds.contains(marker.position)
}

谢谢!它工作得很好!节省了我很多时间如果我的标记一半在区域内,一半在区域外,它会返回什么?实际上,我想检查我的标记是否完全在区域内。我怎么检查呢?严格来说,你的标记是一个点,所以它没有尺寸。如果您的目标是确保与标记关联的图形图像完全可见,我建议您在这个条件下迭代,缩小到满意为止,然后再缩小一个级别。