如何搜索某个国家某个地区的餐厅?
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";
这里是带有点列表的多边形对象(写得太长了我把它命名为%多边形来回答这个问题)
谢谢。
您正在构建点和多边形 - 而不是具有适当的几何列 - 这是低效的。
你还没有讲到空间索引,所以相交操作会很慢。
您没有指定多边形的复杂性:如果它们有很多顶点,相交操作会很慢。这可以通过先细分它们来改善。
所以从技术上讲,使用索引和最终细分的多边形可以使这种操作非常快。
但是,地址通常并不完美。有些可能不完整,有些可能只是错误的(例如:有人输入了邻近城镇的名称)。按几何选择与按属性选择会给出不同的结果,因此您可能需要在决定之前分析您的数据质量,并仔细比较两种方法之间的结果差异。
我在 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";
这里是带有点列表的多边形对象(写得太长了我把它命名为%多边形来回答这个问题)
谢谢。
您正在构建点和多边形 - 而不是具有适当的几何列 - 这是低效的。
你还没有讲到空间索引,所以相交操作会很慢。
您没有指定多边形的复杂性:如果它们有很多顶点,相交操作会很慢。这可以通过先细分它们来改善。
所以从技术上讲,使用索引和最终细分的多边形可以使这种操作非常快。
但是,地址通常并不完美。有些可能不完整,有些可能只是错误的(例如:有人输入了邻近城镇的名称)。按几何选择与按属性选择会给出不同的结果,因此您可能需要在决定之前分析您的数据质量,并仔细比较两种方法之间的结果差异。