【发布时间】:2017-01-12 16:16:38
【问题描述】:
我是 sql 的新手,并试图使用它来加速对来自包含 lat 和 lon 的 csv 的一组约 120 万次行程的空间分析,以获取接送点。 我想用简单的英语做的是:
- 选择从感兴趣区域开始的所有行程(作为 shapefile 加载到我的数据库中)到一个表中
- 选择所有在感兴趣区域结束的行程进入另一个 - 在这些点和人口普查轨迹的 shapefile 之间执行空间连接(其中包含社区名称)
- 按社区名称计数,列出往返感兴趣区域的最频繁出发地/目的地。
我正在使用的代码如下(如果有帮助,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 中的“trips”数据集中绘制了一小部分点样本,以确保它们被正确投影并与 ProjArea shapefile 重叠。他们是。
我将这个创建的多点 shapefile 导入到我的地理数据库中,以测试它是否适用于 ST_Intersects。没有。
我尝试使用 ST_Within。这引发了错误消息:
错误:函数 st_within(字符变化,几何)不存在
....
提示:没有函数匹配给定的名称和参数类型。你 可能需要添加显式类型转换。
我正在使用 Big SQL 和 postgres 谢谢!!
【问题讨论】:
-
如果你使用 PostGIS,为什么这个标签是 mysql?此外,最好在 GIS.SE 或 DBA.SE 上询问。
标签: postgresql gis postgis