From c91ee63043e39e4cdc3dff86f2ff7bdfb45ceca4 Mon Sep 17 00:00:00 2001 From: Xiaolong Cao Date: Fri, 12 Sep 2025 15:31:21 +0800 Subject: [PATCH] Add support for VisiumV2 image coordinates in Seurat Updated makeShinyFilesSpatial to handle both VisiumV1 and VisiumV2 image formats in Seurat objects. VisiumV2 coordinates are now extracted from boundaries$centroids and converted to the expected format, ensuring compatibility with newer Seurat spatial data. --- R/makeShinyFilesSpatial.R | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/R/makeShinyFilesSpatial.R b/R/makeShinyFilesSpatial.R index 6c443be..2c20f71 100644 --- a/R/makeShinyFilesSpatial.R +++ b/R/makeShinyFilesSpatial.R @@ -30,16 +30,34 @@ makeShinyFilesSpatial <- function( sc1image = list() if(class(obj)[1] == "Seurat"){ if(.hasSlot(obj, "images")){ - # coordinates - sc1image$coord <- obj@images[[1]]@coordinates + # coordinates - handle both VisiumV1 and VisiumV2 formats + visium_image <- obj@images[[1]] + if ("VisiumV2" %in% class(visium_image)) { + # New VisiumV2 format - coordinates are in boundaries$centroids + coords <- visium_image@boundaries$centroids@coords + # Convert to expected format with imagecol and imagerow columns + sc1image$coord <- data.frame( + tissue = 1, # Default tissue value + row = NA, # Not available in VisiumV2 + col = NA, # Not available in VisiumV2 + imagecol = coords[, "x"], + imagerow = coords[, "y"] + ) + rownames(sc1image$coord) <- rownames(coords) + } else { + # Traditional VisiumV1 format + sc1image$coord <- visium_image@coordinates + } + # uncropped background image bg_image <- GetImage(obj, mode = "raster") # background image # bg_grob <- rasterGrob(bg_image, width=unit(1,"npc"), height=unit(1,"npc"), # interpolate = FALSE) # background image grob sc1image$bg_image <- bg_image # sc1image$bg_grob <- bg_grob + # for cropped image generation in the server.R script - sc1image$lowres <- obj@images[[1]]@scale.factors$lowres + sc1image$lowres <- visium_image@scale.factors$lowres } } else {