检测谷歌地图街景静态图像的"我们没有图像"

tes*_*ter 13 static google-maps image google-street-view

我正在生成街景静态图像,如下所示:

https://maps.googleapis.com/maps/api/streetview?size=1080x400&location=%s&fov=90&heading=235&pitch=0&key=%s

如果您访问该链接,则会看到一张图片,上面写着"对不起,我们没有图片......"

有没有办法检测这个"对不起"状态,以便我可以回到另一个图像?

sam*_*var 7

一个快速的解决方案是使用xmlrpc加载图像文件并检查其md5sum是否为30234b543d5438e0a0614bf07f1ebd25,或者其大小是1717字节(不太可能另一个图像具有完全相同的大小),但这不是非常强大,因为我看到Google改变了图像中文本的位置.虽然这是原型的一个非常好的开始.

你可以改为进行图像处理.请注意,由于Google可能决定随时更改图像的外观,因此它仍然不是很强大.你必须决定它是否值得.

无论如何,这是我如何使用jQuery做到这一点:

  • 加载图像并打开2D上下文以进行直接pxiel访问(请参阅此问题以了解如何执行此操作)
  • 分析图像:
    • 随机位置的2×2像素样本组; 我推荐至少30组
    • 如果所有像素具有相同的值并且它们的R/G/B值相差不超过10%(即它们是灰色的),则一组2×2像素是好的
    • 计算图像中良好像素组的比率
  • 如果有超过70%的像素组,那么我们非常确定这是"无图像"版本:将其替换为您选择的另一个图像.

我不建议直接测试RGB值的原因是因为JPEG解压缩在不同浏览器上的行为可能略有不同.


the*_*unt 3

这种情况已经内置在 3.0 版本中,因为布尔测试状态 === streetviewStatus.Ok,这是我的情况解决的一个片段

if (status === google.maps.StreetViewStatus.OK) {
            var img = document.createElement("IMG");
            img.src = 'http://maps.googleapis.com/maps/api/streetview?size=160x205&location='+ lat +','+ lng  +'&sensor=false&key=AIzaSyC_OXsfB8-03ZXcslwOiN9EXSLZgwRy94s';
            var oldImg = document.getElementById('streetViewImage');
            document.getElementById('streetViewContainerShow').replaceChild(img, streetViewImage);
        } else {
            var img = document.createElement("IMG");
            img.src = '../../images/ProfilnoProfilPicture.jpg';
            img.height = 205;
            img.width = 160;
            var oldImg = document.getElementById('streetViewImage');
            document.getElementById('streetViewContainerShow').replaceChild(img, streetViewImage);
        }
Run Code Online (Sandbox Code Playgroud)