2016-09-17 54 views
0

我有一个xml项目文件有几个图层,其中许多依次划分为2个(低/高)或3个(低/中/高)层,每个图层覆盖不同缩放范围。整个层数(考虑细分)也是42.我使用mapnik 3.0.12的python-mapnik绑定。 那么,如果我看看PostgreSQL日志,每次我在给定的缩放级别上请求一个地图图像(一个简单的静态图像,而不是一系列的图块),通常只需要12个42)要执行的查询,我总是看到这个42倍:Mapnik:太多的“LIMIT 0”查询

“时间:xx.xxx毫秒声明:”

随后查询itsefl的定义,再加上“LIMIT 0”结尾。 然后我可以找到这个12倍:

“时间:xx.xxx MS执行:”

这是有关实际上需要执行的12个查询。 我想42个查询的尾部“LIMIT 0”是“检查查询”,执行分析哪个索引是最好的使用,等等......但我想知道是否有办法做这仅适用于实际必须一次执行的查询,而不适用于project.xml文件中的所有查询(图层)。

回答

0

我注意到我的mapnik项目文件中有类似的行为(我正在使用Node.js绑定)。我能够减少数据库查询,数量由Datasource元素提供extentsrid参数:

<Datasource> 
    <Parameter name="extent">-180 -90,180 90</Parameter> 
    <Parameter name="srid">4326</Parameter> 
</Datasource> 

我相信Mapnik的提前查询执行两个查询检索功能来确定SRID和层的范围。通过提前在数据源中提供这些信息,mapnik将不需要执行这些查询。

+0

我意识到这是我的错:在我的代码中,我反复调用每个tile请求的'mapnik.load_map(...)'方法,而不是在启动服务器时调用一次。 – Andrea