gpt4 book ai didi

postgresql - 如何使用来自 postgres 数据库的地理数据创建 GeoJSON 以在层 URL 中对其进行寻址?

转载 作者:行者123 更新时间:2023-11-29 12:27:24 25 4
gpt4 key购买 nike

我想在 map 上显示一个国家的行政边界,并可能进行用户交互(更改填充颜色,在弹出窗口中显示所选多边形的统计数据,使用 onmouseover 之类的事件,(取消)通过单击选择许多多边形和等等)在带有 openstreetmap 的 Leaflet map 上。

到目前为止我做了什么:

我编写了一个脚本,通过用户定义区域的请求将这些边界显示为多边形。这些数据可能非常庞大。来自整个国家的所有边界的数据都是许多兆字节,因此在使用 jQuery 到 php 脚本的标准 ajax 请求中等待它太慢了。

我如何读取数据并存储它:

首先,我从 osm 文件中读取了 xml 数据并将其存储在 postgres 数据库中。边界(来自 osm 的关系)存储为几何集合(仅多边形和多边形)。

我想要实现的目标:

现在我想在 map 上显示所有边界。在更高的缩放级别上,它应该显示更多来自子级别的边界。因此用户可以看到他在较低级别上看到的子区域。

第一层:一个多边形中的整个国家/地区。更高的缩放级别:更高级别的行政边界[……等等……]

一种似乎是解决方案的可能性:

http://bl.ocks.org/glenrobertson/6203331

在该示例中,客户端以与 map 图 block 相同的方式在服务器上请求 geojson 数据。

var geojsonURL = 'http://polymaps.appspot.com/state/{z}/{x}/{y}.json';

所以我可以在每个缩放级别上提供不同的 geojson,并且只提供我真正需要的那些多边形。

我如何将数据从几何集合转换为可以用这种方式寻址的 geojson?

一个例子会很好。

最佳答案

答案的要素......

为类似/{z}/{x}/{y}.json 的 url 提供 geojson 数据意味着您必须检索与缩放级别 z 中的平铺 x、y 相关的数据。

要知道我们说的是哪个 latlng,您可以使用以下 php:

// 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";

要检索您的数据,您必须选择在所需图 block 中至少有一个点的多边形。

请记住,由于多边形可能跨越多个图 block ,您将在不同的响应中返回相同的多边形。所以你应该用一个唯一的 id 命名每个多边形,这样你就可以在你的客户端处理这些重复

引用:http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

关于postgresql - 如何使用来自 postgres 数据库的地理数据创建 GeoJSON 以在层 URL 中对其进行寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com