2016-08-19 10 views
1

私は2つの線ストリングLine1、Line2を持っています。PostGISのST_DWithinの代わりにpythonで整形式

line1 = "LINESTRING(72.863221 18.782499,72.863736 18.770147,72.882275 18.756169,72.881417 18.750805,72.878842 18.736987,72.874379 18.709512,72.860989 18.679593,72.864422 18.653897)" 
line2 = "LINESTRING(72.883133 18.780793,72.882103 18.760314,72.862534 18.716422,72.860474 18.683577)" 

次のPOSTGISのクエリを整形して実行しようとしています。今のところ私はST_DWithinコマンドの代替を見つけることができませんでした。

road2 = "ST_GeographyFromText('SRID=4326;%s')"%line1 
road4 = "ST_GeographyFromText('SRID=4326;%s')"%line2 
cur.execute("SELECT ST_AsText(road1) from %s as road1,%s as road2 
      where ST_DWithin(road1,road2,500)"%(road2,road4)) 
res = cur.fetchall() 
print res 

誰でもST_DWithinの何が魅力的であるか知っていますか?

答えて

0

私が知る限り、平面的な座標(地形タイプなし)の操作のみをサポートしています。緯度/経度に直接(例えば、いくつかの平面投影で作業

  • :しかし、地球の曲率を無視できるように大きすぎないラインストリング、1つは、部分的に、このことにより、「回避する」ことができまたは経度/緯度座標)

  • すなわちST_DWithinのドキュメントの2番目の音符とST_Expandのドキュメントの最初のノート、以下:

    1. チェックする場合は第二ラインストリングの交差のバウンディングボックス

      また
      from shapely.wkt import dumps, loads 
      from shapely.geometry.geo import box 
      
      spec = [ 
          "LINESTRING(72.863221 18.782499,72.863736 18.770147,72.882275 18.756169,72.881417 18.750805,72.878842 18.736987,72.874379 18.709512,72.860989 18.679593,72.864422 18.653897)", 
          "LINESTRING(72.883133 18.780793,72.882103 18.760314,72.862534 18.716422,72.860474 18.683577)" 
      ] 
      
      lines = list(map(loads, spec)) 
      
      eta = 0.005 
      
      b1 = box(*lines[0].bounds).buffer(eta) 
      b2 = box(*lines[1].bounds) 
      
      flag = b2.intersects(b1) and (lines[0].distance(lines[1]) < eta) 
      print(eta, flag) 
      

      、あなたが希望の場合:最小距離が実際に所定の閾値例えば

を下回っている場合は、最初のラインストリング

  • の拡大バウンディングボックスで、はい、チェックしている場合2番目のLineString全体が最初のLineStringからの所定のしきい値内にあるかどうかを確認する場合は、

    のようにメソッドを使用することもできます

    bufferメソッドにここで指定されたしきい値は、線ストリングが定義されている同じ座標系で表されます。 lon/latシステム内では、これは「中心角」を表します。この問題は、固定されたetaに対応するgreat circle distanceが緯度と経度の特定の値だけでなく、変位の方向。ただし、LineStringsが大きすぎず、必要な精度が高すぎない場合は、おそらくmatter that muchになりません。

  • 関連する問題