Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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
Javascript 呼叫“a”;默认瓷砖";在谷歌地图中_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 呼叫“a”;默认瓷砖";在谷歌地图中

Javascript 呼叫“a”;默认瓷砖";在谷歌地图中,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在从事一个项目,该项目将数字组织学(显微镜)幻灯片图像转换为谷歌地图体系结构中排列的256x256像素JPEG图像块。由于这些组织是在完全白色的背景下设置的(),所以我使用了一个程序,当将显微镜幻灯片文件转换为平铺JPEG时,它也会删除完全白色的平铺。这节省了大量的存储空间,也减少了上传到服务器的文件数量,这很有帮助,因为我无法控制服务器(我使用的是谷歌存储) 但是,这会在图像中留下空白。我试图让谷歌地图脚本加载一个全白色的JPEG图像,而此时该位置不存在平铺。我在任何地方都找不到答案,我的

我正在从事一个项目,该项目将数字组织学(显微镜)幻灯片图像转换为谷歌地图体系结构中排列的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
执行的,则需要确保映像不存在