2

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

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

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

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

非常感谢您提前提供的帮助。

干杯,史蒂夫

4

2 回答 2

4

我也在使用 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")。

于 2013-08-30T16:23:35.773 回答
0

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

它的目的是为您提供包含您给定的点的图块的坐标,用于特定的缩放级别,但它还将 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 才能使修改生效)。

于 2014-04-26T08:26:12.127 回答