我最近和OpenLayers一起玩得很开心(http://www.nufosmatic.com),并且因为我不能解决这个问题。我实际上甚至不确定问题所在。
我需要生成一些静态显示:我在任何地方替换Java并迁移到Python和JavaScript。我在这里找到了一个很好的截取网页截图的例子:
http://webscraping.com/blog/Webpage-screenshots-with-webkit/
它使用Qt" QWebview"渲染然后转储网页。它适用于在Windows XP x86上的Virtual Box下运行的Windows 7 x86_64(Python 2.7.6 x86)和Linux Fedora 20(python 2.7.5)中发布的OpenLayers 2示例。
然后本周OpenLayers 3发布了,我当然尝试了这些新的例子(OL 2示例Git页面已经消失,但2.10示例似乎有效)。
我从下面发布的代码中获得了以下错误诊断信息:
$ python webscrape_olprob.py
2.0 example
loaded the Generic plugin
saving simple_2_0.0.png
3.0 example
libGL error: failed to load driver: swrast
saving simple_3_0.0.png
硬件加速与此特定错误之间似乎存在某种关系("无法加载驱动程序:swrast)。
我想验证在Windows上OL3是(sorta / kinda / total / not)也是如此。不幸的是,我设置它进行测试的Windows 7环境在可预见的未来远离我(我讨厌需要一个人在它前面工作的计算机)。
我在这里发帖是因为这个论坛展示了卓越的多样性,这个问题可能是Qt / QWebview,VirtualBox,Fedora 20或OpenLayers。鉴于2.0" OSM"之间并没有太大的区别。和3.0"简单"又名" OSM"例如,我的钱是在OpenLayers上有一个硬件加速要求,(1)不能关闭[这会很糟糕]或(2)可以关闭但没有人抱怨这个,所以指向在各种论坛上,这些文件已经脱颖而出。
#
# http://webscraping.com/blog/Webpage-screenshots-with-webkit/
#
import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
class Screenshot(QWebView):
def __init__(self):
self.app = QApplication(sys.argv)
QWebView.__init__(self)
self._loaded = False
self.loadFinished.connect(self._loadFinished)
def capture(self, url, output_file):
self.load(QUrl(url))
self.wait_load()
# set to webpage size
frame = self.page().mainFrame()
self.page().setViewportSize(frame.contentsSize())
# render image
image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
painter = QPainter(image)
frame.render(painter)
painter.end()
print 'saving', output_file
image.save(output_file)
def wait_load(self, delay=0):
# process app events until page loaded
while not self._loaded:
self.app.processEvents()
time.sleep(delay)
self._loaded = False
def _loadFinished(self, result):
self._loaded = True
s = Screenshot()
print "2.0 example"
s.capture('http://dev.openlayers.org/releases/OpenLayers-2.10/examples/osm.html', 'simple_2_0.0.png')
print "3.0 example"
s.capture('http://openlayers.org/en/v3.0.0/examples/simple.html', 'simple_3_0.0.png')
是
更新 - 在Windows上运行并且没有得到任何警告(从Cygwin shell下面实例化):
webkit/webscrape> c:/python27/python webscrape_olprob.py
2.0 example
saving simple_2_0.0.png
3.0 example
saving simple_3_0.0.png
但是,2.0示例呈现了一个地图:
并且3.0示例没有:
所以3.0在Windows上仍然存在问题......因为3.0刚刚发布,我想我会走开......
我需要测试渲染器建议,这需要我更改发布的示例。我不喜欢因为(1)我需要使用Canvas,因为我有目标的OL功能和(2)我正在寻找一些影响来自ENGINE的渲染的方法,因为这是QWebView正在进行渲染...
答案 0 :(得分:0)
你可以提示"到ol.Map,您希望通过renderer
选项属性
ol.RendererHints.canvas
用于HTML5画布ol.RendererHints.dom
用于经典的基于DOM的方法ol.RendererHints.webgl
根据API documentation,ol.Map应该正确地确定要使用的渲染器,除非您通过自己指定渲染器来覆盖。也许在ol.Map中的渲染器支持测试可能会在QtWebView下混淆。