Postgresql 如何使用postgres数据库中的地理数据创建GeoJSON以在层URL中寻址?
我想在地图上显示一个国家的行政边界,可以通过用户交互改变填充颜色,在弹出窗口中显示统计数据到选定的多边形,使用事件,如onmouseover,通过点击取消选择多个多边形,等等,在带有openstreetmap的传单地图上 到目前为止我所做的: 我编写了一个脚本,通过用户定义的区域请求将这些边界显示为多边形。这些数据可能非常庞大。来自全国所有边界的数据都有很多兆字节,因此在使用jQuery的标准ajax请求中等待php脚本的速度太慢 如何读取和存储数据: 首先,我从osm文件中读取xml数据,并将其存储在postgres数据库中。 osm中的边界关系存储为几何体集合仅多边形和多多边形 我想要达到的目标: 现在我想在地图上显示所有的边界。在更高的缩放级别上,它应该显示子级别的更多边界。所以用户可以看到他在较低级别上看到的子区域 第一级:整个国家在一个多边形中。 更高的缩放级别:更高级别的管理边界 [……等等……] 一种似乎是解决方案的可能性: 在该示例中,客户端在服务器上以与地图分幅相同的方式请求geojson数据 var geojsonURL='{z}/{x}/{y}.json' 因此,我可以在每个缩放级别上提供不同的geojson,并且只提供我真正需要的多边形 如何将数据从geometry collection转换为geojson,并以这种方式处理 举个例子就好了。答案的要素 为类似/{z}/{x}/{y}.json的url传递geojson数据意味着您必须在缩放级别z中检索与tile x,y相关的数据 要了解我们所说的latlng,可以使用以下php:Postgresql 如何使用postgres数据库中的地理数据创建GeoJSON以在层URL中寻址?,postgresql,openstreetmap,leaflet,layer,geojson,Postgresql,Openstreetmap,Leaflet,Layer,Geojson,我想在地图上显示一个国家的行政边界,可以通过用户交互改变填充颜色,在弹出窗口中显示统计数据到选定的多边形,使用事件,如onmouseover,通过点击取消选择多个多边形,等等,在带有openstreetmap的传单地图上 到目前为止我所做的: 我编写了一个脚本,通过用户定义的区域请求将这些边界显示为多边形。这些数据可能非常庞大。来自全国所有边界的数据都有很多兆字节,因此在使用jQuery的标准ajax请求中等待php脚本的速度太慢 如何读取和存储数据: 首先,我从osm文件中读取xml数据,并将
// SpericalMercator projection
// http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_numbers_to_lon..2Flat._5
$n = pow(2, $zoom);
$lon1 = $xtile / $n * 360.0 - 180.0;
$lat1 = rad2deg(atan(sinh(pi() * (1 - 2 * $ytile / $n))));
$lon2 = ($xtile + 1) / $n * 360.0 - 180.0;
$lat2 = rad2deg(atan(sinh(pi() * (1 - 2 * ($ytile + 1) / $n))));
$SQL_where = "'latitude' <= $lat1 AND 'latitude' > $lat2 AND 'longitude' >= $lon1 AND 'longitude' < $lon2";
要检索数据,您必须选择在所需平铺中至少有一个点的多边形
请记住,由于多边形可能跨越多个平铺,因此将以不同的响应返回相同的多边形。因此,您应该为每个多边形命名一个唯一的id,以便您可以在客户端处理这些重复项
参考资料:我不知道postgre数据库的详细信息,但概念是您只会请求用户视图边界框内的多边形。传单中有获取当前视图边界框的方法,然后将其传递给服务器以获取多边形。Postgres/GIS有一个ST_AsGeoJSON函数,该函数将简单地将几何体作为GeoJSON返回。如果希望包含属性并返回功能集合,则需要使用array_agg和array_to_json函数。这里有一些示例查询可能会有所帮助。谢谢你们两位的回答。我会试试你的建议和弗朗西马克的回答。谢谢你的回答。我接受这个答案,因为它看起来真的很有希望。我会试试看。