如何搜索某个国家某个地区的餐厅?

How do I search for restaurants in a region in a country?

我在 postgis 中有以下信息的餐厅:

Last name
longitude
latitude
address.

地址用外键notios分成几个table这样我就有了国家table、地区table等

我想知道位于某个国家/地区(例如法国)的餐厅。

所以我有两个解决方案:

搜索国家table,然后搜索地区,然后显示附属于该地区的餐馆列表 要么 使用 postgis 多边形系统。

我想听听您对哪个最有效/最相关的意见。

目前我使用这个查询(我认为可以改进):

      "select  *
 from data where  ST_Intersects(st_point(lon, lat) , \n" +
                        " ST_GeomFromGeoJSON('\n" +
                       " %polygone* \n"+
                        "')\n" +
                        ") = 'true' order by name";

这里是带有点列表的多边形对象(写得太长了我把它命名为%多边形来回答这个问题)

谢谢。

您正在构建点和多边形 - 而不是具有适当的几何列 - 这是低效的。

你还没有讲到空间索引,所以相交操作会很慢。

您没有指定多边形的复杂性:如果它们有很多顶点,相交操作会很慢。这可以通过先细分它们来改善。

所以从技术上讲,使用索引和最终细分的多边形可以使这种操作非常快。

但是,地址通常并不完美。有些可能不完整,有些可能只是错误的(例如:有人输入了邻近城镇的名称)。按几何选择与按属性选择会给出不同的结果,因此您可能需要在决定之前分析您的数据质量,并仔细比较两种方法之间的结果差异。