Display thumbs of your photos at their locations on a map
cvp last edited by
If you are using MapView, like in demo of @JonB, you can display thumbs of your photos at their locations, with their original proportions or cropped and centered squares or even cropped and centered circles.
Assuming you pass the path of your photo as subtitle of anotations. In this case, the photo have to reside at an accessible path for your script (local or iCloud).
def mapView_viewForAnnotation_(self,cmd,mk_mapview,mk_annotation): try: # not specially called in the same sequence as pins created # should have one MKPinAnnotationView by type (ex: pin color) annotation = ObjCInstance(mk_annotation) mapView = ObjCInstance(mk_mapview) if annotation.isKindOfClass_(MKPointAnnotation): tit = str(annotation.title()) subtit = str(annotation.subtitle()) #print('subtit',subtit) if 'manuel' not in subtit: #if tit != addr_loc: id = 'photo=' + subtit else: id = 'address' #print('id',id) pinView = mapView.dequeueReusableAnnotationViewWithIdentifier_(id) if not pinView: # Modify pin color: use MKPinAnnotationView # Modify pin image: use MKAnnotationView if 'photo' in id: # photo pinView = MKAnnotationView.alloc().initWithAnnotation_reuseIdentifier_(annotation,id) #print(dir(pinView.layer())) img=ui.Image.named(os.path.expanduser(subtit) wh = img.size thumb = 64 if 1 == 0: # no crop the photo as centered square x = 0 y = 0 w = thumb h = int(w * wh / wh) thumbx = w thumby = h else: # crop the photo to show a square if wh >= wh: # photo is larger than high # height will be shown, width will be cut and centralized h = thumb w = int(thumb * (wh/wh)) x = - (w-thumb)/2 y = 0 else: # photo is higher than wide # width will be shown, height will be cut and centralized w = thumb h = int(thumb * (wh/wh)) x = 0 y = - (h-thumb)/2 thumbx = thumb thumby = thumb with ui.ImageContext(thumbx,thumby) as ctx: img.draw(x,y,w,h) img = ctx.get_image() pinView.setImage_(img.objc_instance) # photo with corner, here photo cropped by a circle pinView.layer().setMasksToBounds_(True) pinView.layer().setCornerRadius_(thumb/2) pinView.layer().setBorderWidth_(2.0) pinView.layer().setBorderColor_(UIColor.blueColor().CGColor()) else: # address pinView = MKPinAnnotationView.alloc().initWithAnnotation_reuseIdentifier_(annotation,id) pinView.canShowCallout = True # tap-> show title pinView.animatesDrop = True # Animated pin falls like a drop pinView.pinColor = 1 # 0=red 1=green 2=purple else: pinView.annotation = annotation return pinView.ptr return None except Exception as e: print('exception: ',e)