2013-03-07 95 views
0

我在PLPGSQL以下查詢:比較操作錯誤

FOR _t IN EXECUTE 'select distinct_network_point.id AS network_point_id 
      from distinct_network_point, all_points_ordered 
      where road_id='||road_id||' AND distinct_network_point.point = all_points_ordered.point AND all_points_ordered.point != st_setsrid(st_makepoint('||new_point||'),4326) 
      order by st_distance(all_points_ordered.point,st_setsrid(st_makepoint('||new_point||'),4326)) 
      limit 1' 

對於一些它給我以下錯誤:

enter image description here

如果我用這個<>運營商,它會給我這個比:

enter image description here

任何人都可以解釋它的真正含義嗎?該查詢在sql中正常工作。

+0

我已嘗試了,不過謝謝你的建議 – 2013-03-07 22:46:28

+0

我已經更新的問題,以顯示錯誤,當我嘗試<>運算符。 @bernie – 2013-03-07 22:48:45

回答

1

由於您正在處理幾何類型,因此!=<>運算符均無效。

Instead, please refer to the following list of geometric operators.

在這種情況下,由於要檢查兩個點是不一樣的,我相信你可以使用運營商<->距離之間,並檢查您的兩點之間的距離大於某種非常小的epsilon價值。

喜歡的東西:

AND all_points_ordered.point <-> st_setsrid(st_makepoint('||new_point||'),4326) > 0.0001 
+0

非常感謝您的建議@michaelfredrickson – 2013-03-07 23:06:38

+1

我認爲將它們轉換爲文本會更好。 'all_points_ordered.point :: text <> st_setsrid(st_makepoint('|| new_point ||'),4326):: text'。它始終工作,可能會更快 – 2013-03-07 23:14:34