我是sql的新手,并尝试使用它来加速从包含lat和lon的csv的约120万次旅行中的空间分析,以获取拾取和下降点。 我用简单的英语做的是:
我正在使用的代码如下(如果它的帮助,NTA或邻居制表区域是我希望在此操作结束时在我的表格中显示的邻域名称):
--Select all trips that end in project area
SELECT *
INTO end_PA
FROM trips, projarea
WHERE ST_Intersects(trips.dropoff, projarea.geom);
--for trips that end in project area - index by NTA of pick up point
ALTER TABLE end_PA ADD COLUMN GID SERIAL;
CREATE TABLE points_ct_end AS
SELECT nyct2010.ntacode as ct_nta, end_PA.gid as point_id
from nyct2010, end_PA WHERE ST_Intersects(nyct2010.geom , end_PA.pickup);
--Count most common NTA
--return count for each NAT as a csv
copy(
select count(ct_nta) from points_ct_end
group by ct_nta
order by count desc)
to 'C://TaxiData//Analysis//Trips_Arriving_LM.csv' DELIMITER ',' CSV HEADER;
但是,我从一开始就遇到问题 - ST_Intersects不会返回感兴趣区域内的任何点!
我到目前为止尝试过的解决方案:
我的第一个想法是这些点不在正确的SRID中。当我创建' dropoff'我将SRID设置为4326.我尝试使用ST_SetSRID将两个数据集的投影更改为4326,并在ArcMap中手动将shapefile重新投影到4326 - 但都没有工作。
我在“旅行”中绘制了一小部分积分。在Arc Map中设置的数据,以确保它们与ProjArea shapefile正确投影和重叠。他们是。
我将创建的多点shapefile导入到我的地理数据库中,以测试它是否适用于ST_Intersects。不。
我尝试使用ST_Within。这引发了错误消息:
错误:函数st_within(字符变化,几何)不存在
....
提示:没有函数匹配给定的名称和参数类型。您 可能需要添加显式类型转换。
我正在使用Big SQL和postgres 谢谢!
答案 0 :(得分:0)
我的第一个想法是这些点不在正确的SRID中。当我创建'dropoff'点时,我将SRID设置为4326.我尝试使用ST_SetSRID将两个数据集的投影更改为4326,并在ArcMap中手动将shapefile重新投影到4326 - 但都没有工作。
ST_SetSRID不会更改投影(重新投影)。它只是改变了内部表征。如果先前的SRID与输入数据匹配,这可以完全搞砸了所有内容。你可能想要ST_Transform()
。
这里没有足够的信息来解决这个问题。但是,我们可以回答这个......
ERROR: function st_within(character varying, geometry) does not exist
这仅仅意味着第一个参数不是几何。当然,我们根本无法做任何事情,因为我们没有您使用ST_Within()
尝试的查询。
ST_Intersects()
的语法看起来是正确的。但是,根本没有足够的信息来提供帮助。显示一些架构和示例数据。