Postgresql 如何比较';人口=*';在Tilemill CartoCSS中?

Postgresql 如何比较';人口=*';在Tilemill CartoCSS中?,postgresql,openstreetmap,postgis,mapbox,tilemill,Postgresql,Openstreetmap,Postgis,Mapbox,Tilemill,问题 将填充与我的TileMill项目中的CartoCSS进行比较是行不通的,除非我在我的Postgres查询中将填充转换为数字类型。问题是它不稳定。我可以为荷兰做到这一点,但在德国显然有一个人口标签,即27813。这导致Postgis插件:错误:双精度类型的输入语法无效:“27 813” 这让我相信,在Postgres数据库中,人口是一种字符串/文本类型。查看导入过程中使用的文件证实了我的怀疑,即它是作为字符串返回的 Postgresql查询 ( SELECT way, place AS ty

问题

将填充与我的
TileMill
项目中的
CartoCSS
进行比较是行不通的,除非我在我的
Postgres
查询中将填充转换为数字类型。问题是它不稳定。我可以为荷兰做到这一点,但在德国显然有一个人口标签,即
27813
。这导致
Postgis插件:错误:双精度类型的输入语法无效:“27 813”

这让我相信,在
Postgres
数据库中,人口是一种字符串/文本类型。查看导入过程中使用的文件证实了我的怀疑,即它是作为字符串返回的

Postgresql查询

( SELECT way, place AS type, name, z_order, population
  FROM planet_osm_point
  WHERE place in ('country', 'state', 'city', 'town', 'village', 'hamlet', 'suburb', 'neighbourhood', 'locality', 'isolated_dwelling','city_block','borough','islet','island')
  ORDER BY population DESC NULLS LAST
) AS data
来自CartoCSS的片段

问题


有没有一个正确的方法来比较人口,而不铸造它或得到铸造问题?铸造它是正确的方法吗

原始数据可能包含各种错误。这意味着填充标记的值甚至可能包含字母。请为数据库中的错误做好准备,或者在导入过程中修复/丢弃这些错误。查看,在搜索字段中键入任何您喜欢的字母,按enter键并查看所有错误结果。确保您可以处理数据中的此类错误。我同意@scai。通过在数据库中强制使用数据类型来修复它。起初这可能是一个痛苦的过程,但最终你会得到可靠的数据,并且不必求助于像将人口转换为数字类型这样丑陋的黑客。谢谢,这听起来确实是个好主意。我觉得MapBox提到的很奇怪,好像它应该“开箱即用”。我正在使用osm2pgsql导入OSM数据。您是否建议以某种方式过滤那里的总体值?(这意味着修改osm2pgsql)或生成查询以在导入后删除它们?