簡體   English   中英

空間連接問題

[英]Problems with spatial join

我是sql的新手,並嘗試使用它來加速從包含lat和lon的取點和落點的csv進行的約120萬次行程的空間分析。 我想用簡單的英語做的是:

  • 將所有從感興趣的區域開始的旅程(作為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中。 當我創建“下垂”點時,我將SRID設置為4326。我都嘗試使用ST_SetSRID將兩個數據集的投影更改為4326,並在ArcMap中手動將shapefile重新投影為4326-但均無效。

我從Arc Map中的“行程”數據集中繪制了一個小樣本點,以確保正確投影並與ProjArea shapefile重疊。 他們是。

我將此創建的多點shapefile導入到我的地理數據庫中,以測試該文件是否適用於ST_Intersects。 不。

我嘗試使用ST_Within。 這引發了錯誤消息:

錯誤:函數st_within(字符變化,幾何形狀)不存在
....
提示:沒有函數匹配給定的名稱和參數類型。 您可能需要添加顯式類型轉換。

我正在使用Big SQL和postgres,謝謝!

我首先想到的是這些點不在正確的SRID中。 當我創建“下垂”點時,我將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()語法看起來正確。 但是,根本沒有足夠的信息來提供幫助。 顯示一些架構和示例數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM