【发布时间】:2018-11-12 21:52:34
【问题描述】:
我有一个包含(样本)的表 samplecol:
vessel_hash | status | station | speed | latitude | longitude | course | heading | timestamp | the_geom
--------------+--------+---------+-------+-------------+-------------+--------+---------+--------------------------+----------------------------------------------------
103079215239 | 99 | 841 | 5 | -5.41844510 | 36.12160900 | 314 | 511 | 2016-06-12T06:31:04.000Z | 0101000020E61000001BF33AE2900F424090AF4EDF7CAC15C0
103079215239 | 99 | 3008 | 0 | -5.41778710 | 36.12144900 | 117 | 511 | 2016-06-12T06:43:27.000Z | 0101000020E6100000E2900DA48B0F424042C3AC61D0AB15C0
103079215239 | 99 | 841 | 17 | -5.42236900 | 36.12356900 | 259 | 511 | 2016-06-12T06:50:27.000Z | 0101000020E610000054E6E61BD10F42407C60C77F81B015C0
103079215239 | 99 | 841 | 17 | -5.41781710 | 36.12147900 | 230 | 511 | 2016-06-12T06:27:03.000Z | 0101000020E61000004D13B69F8C0F424097D6F03ED8AB15C0
103079215239 | 99 | 841 | 61 | -5.42201900 | 36.13256100 | 157 | 511 | 2016-06-12T06:08:04.000Z | 0101000020E6100000CFDC43C2F71042409929ADBF25B015C0
103079215239 | 99 | 841 | 9 | -5.41834020 | 36.12225000 | 359 | 511 | 2016-06-12T06:33:03.000Z | 0101000020E6100000CFF753E3A50F42408D68965F61AC15C0
我尝试使用以下方法获取多边形内的所有点:
poisInpolygon = """SELECT col.vessel_hash,col.longitude,col.latitude,
ST_Contains(ST_GeomFromEWKT('SRID=4326; POLYGON((-15.0292969 47.6357836,-15.2050781 47.5172007,-16.2597656 29.3821751, 35.0683594 26.1159859, 38.0566406 47.6357836,-15.0292969 47.6357836))'),
ST_GeomFromEWKT(col.the_geom)) FROM samplecol As col;"""
输出是:
(103079215291L, Decimal('40.87123100'), Decimal('29.24107000'), False)
(103079215291L, Decimal('40.86702000'), Decimal('29.23967000'), False)
(103079215291L, Decimal('40.87208200'), Decimal('29.22113000'), False)
(103079215291L, Decimal('40.86973200'), Decimal('29.23963000'), False)
(103079215291L, Decimal('40.87770800'), Decimal('29.20229900'), False)
我不知道结果中的 False 是什么。这是正确的方法还是我做错了什么?
此代码还使用the_geom字段中的索引?
【问题讨论】:
-
为什么表格中有
latitude和longitude?the_geom应该是他们对应的Point吗?那么这个表没有正确规范化,这可能是你问题的一部分。 -
所以你的意思是纬度经度一定不能放在桌子上?查找我创建的多边形中所有点的功能错误?
-
如果
the_geom是实际点,则经纬度已经存在(使用st_x和/或st_y获取它们)。当您在表中另外添加它们时,the_geom的纬度和/或经度可能与其他列中的不同。这可能会给你一个看起来不正确的结果,因为你正在查看实际上没有使用的坐标。但是您没有回答列之间是否存在这种关系。 -
连接是:UPDATE samplecol SET the_geom = ST_GeomFromText('POINT(' || longitude || ' ' || latitude || ')',4326);
-
那么
longitude和latitude是多余的。只保存Point。
标签: python postgresql postgis psycopg2