Javascript 呼叫“a”;默认瓷砖";在谷歌地图中
我正在从事一个项目,该项目将数字组织学(显微镜)幻灯片图像转换为谷歌地图体系结构中排列的256x256像素JPEG图像块。由于这些组织是在完全白色的背景下设置的(),所以我使用了一个程序,当将显微镜幻灯片文件转换为平铺JPEG时,它也会删除完全白色的平铺。这节省了大量的存储空间,也减少了上传到服务器的文件数量,这很有帮助,因为我无法控制服务器(我使用的是谷歌存储) 但是,这会在图像中留下空白。我试图让谷歌地图脚本加载一个全白色的JPEG图像,而此时该位置不存在平铺。我在任何地方都找不到答案,我的编程技能充其量只是新手水平。我能找到的最接近的东西是使用,但我并不总是知道哪些瓷砖需要更换,这似乎是必要的信息,以填补这些未填充的区域 我目前的(非常基本的脚本)如下所示:Javascript 呼叫“a”;默认瓷砖";在谷歌地图中,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在从事一个项目,该项目将数字组织学(显微镜)幻灯片图像转换为谷歌地图体系结构中排列的256x256像素JPEG图像块。由于这些组织是在完全白色的背景下设置的(),所以我使用了一个程序,当将显微镜幻灯片文件转换为平铺JPEG时,它也会删除完全白色的平铺。这节省了大量的存储空间,也减少了上传到服务器的文件数量,这很有帮助,因为我无法控制服务器(我使用的是谷歌存储) 但是,这会在图像中留下空白。我试图让谷歌地图脚本加载一个全白色的JPEG图像,而此时该位置不存在平铺。我在任何地方都找不到答案,我的
函数初始化()
{
geocoder=新的google.maps.geocoder();
变量myOptions={
缩放:2,
中心:新google.maps.LatLng(0,0),
mapTypeControl:false,
街景控制:错误,
导航控制:对,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“
地图("画布)("myOptions);;
var VM_Map=new google.maps.ImageMapType({
名称:“数字组织学”
alt:‘数字组织学’,
getTileUrl:函数(坐标,缩放){返回customGetTileURL(坐标,缩放);},
tileSize:new google.maps.Size(256256),
minZoom:1,
最大缩放:9,
isPng:false
});
map.mapTypes.set('VM\u-map',VM\u-map);
setMapTypeId('VM_map');
}
函数customGetTileURL(a,b){
返回'SERVER_PATH'+b+'/'+a.y+'/'+a.x+'.jpg'
}
您有一些选项,但它们取决于您的设置和对它的控制程度
1.选项:您似乎正在从服务器加载映像:如果服务器在您的控制下运行,并且它使用Apache或其他可以设置的Web服务器解决方案,您可以将其配置为在请求的映像不存在时返回默认映像(在您的情况下为白色映像)。请参见如何使用Apache实现这一点。如果可能的话,我肯定会选择这个选项
2.选项:如果您事先知道哪些文件不存在,您可以将它们添加到某个js对象中,并始终首先检查它们是否存在,如果不存在,则返回白色图像的url。因此,您将有一个结构如下的JS变量:
non_existing_images = {SAMPLE_ZOOM_1:
{SAMPLE_X_COORD_1:
{SAMPLE_Y_COORD_1:true, SAMPLE_Y_COORD_2:true, ...},
SAMPLE_X_COORD_2:
{SAMPLE_Y_COORD_1:true, SAMPLE_Y_COORD_2:true, ...}
...},
SAMPLE_ZOOM_2:...
}
function customGetTileURL(a,b) {
if(non_existing_images[b] && non_existing_images[b][a.x] && non_existing_images[b][a.y]) return 'SERVER_PATH_TO_WHITE_IMAGE.jpg'; //if image doesn't exist return path to the white image
else return 'SERVER_PATH' + b + '/' + a.y + '/' + a.x + '.jpg'
}
然后有一个函数:
function loadNonExistingImages(){
//this function would determine, which images do not exist on your server. and then save it in not_existing_images object. It may be a call to some backend server which returns this for you.
}
如果您使用某个后端服务器,脚本可以连接do DB(如果您将其用于图像),或者通过其他方式(检查图像是否实际存在)返回不存在的图像列表。使用该函数填充不存在的\u图像
并在填充后调用initialize()代码>(如果您没有后端服务器,可以使用js,但如果您要使用大量图像,我强烈反对使用js,因为这将导致对服务器的大量请求)
然后您只需将customGetTileURL
函数调整为如下所示:
non_existing_images = {SAMPLE_ZOOM_1:
{SAMPLE_X_COORD_1:
{SAMPLE_Y_COORD_1:true, SAMPLE_Y_COORD_2:true, ...},
SAMPLE_X_COORD_2:
{SAMPLE_Y_COORD_1:true, SAMPLE_Y_COORD_2:true, ...}
...},
SAMPLE_ZOOM_2:...
}
function customGetTileURL(a,b) {
if(non_existing_images[b] && non_existing_images[b][a.x] && non_existing_images[b][a.y]) return 'SERVER_PATH_TO_WHITE_IMAGE.jpg'; //if image doesn't exist return path to the white image
else return 'SERVER_PATH' + b + '/' + a.y + '/' + a.x + '.jpg'
}
简单地通过我需要控制服务器来定义默认磁贴,是吗?我无法控制服务器(我向谷歌支付存储费用……我会将此添加到帖子中)。如果你想为缺少的磁贴创建一个白色的磁贴,只需为所有磁贴定义一个白色背景。哦。嗯。那就行了!非常感谢!你想加上这个作为回答,这样我就可以给你评分了吗?这不适用于@Brandon的问题,因为他最多只使用zoom 9,但是如果你的地图缩放在高缩放*下覆盖了一大片区域,并且你的特征是边界,那么创建一个使用白色(或透明)瓷砖作为空瓷砖的瓷砖金字塔是一个糟糕的主意(例如国家边界;财产边界)。为什么?因为在zooms>15时,空白磁贴占平均磁贴目录的约95%,而zooms>15几乎占所有磁贴目录的95%。每个空白磁贴文件为360字节,但由于最小块大小,它在磁盘上占用4KB。加载到边界限制;在客户端测试。感谢您的评论!我无法控制服务器(我正在使用谷歌云存储),但如果我有一个在我的控制下的话,这似乎是一个不错的选择。我也不容易知道哪些磁贴丢失了——我可以找到,但我做的上一个测试文件有20000个空白磁贴(最初是60000个磁贴),所以这似乎不是一个很好的选择。@Brandon-您可能已经解决了这个问题,但一次获取所有分幅通常是没有用的。设置一个分幅,只加载与这些分幅相交的分幅。我们在每个方向上使用屏幕分幅+50%,以便用户可以合理地无缝地在附近导航。这可以做几件事:reduces(每个屏幕的有效负载约为12个瓦片);提高站点响应能力;使检查磁贴是否存在变得简单。当边界更改为以前未查看的边界时,需要调用磁贴获取程序,但这是一个小的折衷。D'oh-应该明确指出,对于控制httpd.conf
和/或htaccess
的用户,“检查磁贴是否存在”JavaScript中的stage是一个操作决策,因为可以将服务器设置为全局用透明的tile替换不存在的图像(通过httpd.conf中的RewriteRule
),也可以使用平铺金字塔根目录中的.htaccess
中的ErrorDocument 404/path/to/transparent.png
在每个目录上执行。如果是通过httpd.conf
执行的,则需要确保映像不存在