是否有一种简单的方法可以从postgis数据库获取osm-bright的配置[" postgis"] [" extent"]值?

时间:2013-08-20 14:34:30

标签: postgresql postgis openstreetmap tilemill

我已经成功设置了一个postgis服务器,用于OSM-Bright。我必须承认服务器对我来说有点黑盒子,所以当我设置它并且工作正常时,我不知道如何最佳地使用它的细节。

在OSM-Bright配置文件中,有一个名为config [“postgis”] [“extent”]的值。在评论中,它表示它可以加速查询,以与数据库相同的单位(可能是球形墨卡托米),使用“XMIN,YMIN,XMAX,YMAX”将整个地球的范围限制为所需的区域。

我的问题是,是否有一种简单的方法可以获得这些值?

例如,假设我有一个项目,我只需要映射纽约州长岛的拿骚县的一部分。我的OSM DB拥有整个美国北美数据集。是否有一种方法或工具可以轻松地将长岛的范围转换为我的数据库投影?

非常感谢您的帮助。

干杯, 史蒂夫

2 个答案:

答案 0 :(得分:3)

我也在使用PostGIS / OSM-Bright / TileMill设置(第一次)。我用osm2pgsql导入了我的OSM数据;感兴趣的表格似乎是planet_osm_polygonplanet_osm_pointplanet_osm_lineplanet_osm_roads

您可以通过运行如下查询来获取每个表的范围值:

SELECT ST_Extent(way) FROM planet_osm_polygon

或者为了获得范围(即所有OSM数据的边界框),您可以运行如下查询:

SELECT
  ST_Extent( way )
FROM (
  SELECT way FROM planet_osm_polygon
  UNION
  SELECT way FROM planet_osm_point
  UNION
  SELECT way FROM planet_osm_line
  UNION
  SELECT way FROM planet_osm_roads
) as foo;

这将返回一个包含minX,minY,maxX,maxY值的框(例如BOX(739651.875 2908247.25,794875.8125 2970042.75) - > config["postgis"]["extent"] = "739651.875 2908247.25 794875.8125 2970042.75")。

答案 1 :(得分:0)

this page上的Python脚本globalmaptiles.py(向下滚动以查看下载链接)完全符合您的要求。

它的目的是为您提供包含您给出的点的图块的坐标,对于某个缩放级别,但它也会将WGS 84中的输入转换为球形墨卡托米(EPSG:900913)。

要获取WGS 84中边界框的坐标,您可以使用Google Maps Lab扩展,LatLng Marker或LatLng Tooltip。

因此,为了准确回答你的问题,长岛拿骚县WGS 84的边界框将是(我认为):

  • 左上:40.920,-73.761
  • 右下:40.597,-73.415

这将使用上述工具给出球形墨卡托米:

  • xmin,ymin,xmax,ymax:-8211036.960402652,5000548.83362593,-8172520.416588181,4953079.755896228

以这种方式使用边界框可以大大加快Tilemill中的渲染速度(当然,您必须重新生成OSM-Bright才能使修改生效)。