7

次のような2列のテーブルがあるとします。

| user_id      | int(11) | NO   | UNI | NULL    |                |
| utm          | point   | NO   | MUL | NULL    |                |

ご覧のとおり、非常に簡単です。utmはPointデータ型です。私はそれを次のように挿入します:

INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));

次に、空間インデックスを作成します。

ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)

了解しました。すべてが良好です。さて、距離<99999の*を選択したいのですが、うまくいき ません!

//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)

ちなみに、私はPointFromWKBなしでINSERT INTOを試みましたが、機能しませんでした。そのため、誰かがPointFromWKBを私に提案しました。

4

4 に答える 4

3

解決しました。これは私がしたことです:

where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;
于 2010-02-16T02:09:45.587 に答える
1

このようにすることもできます。速いかどうかは不明です。

select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999
于 2012-03-08T05:24:47.720 に答える
0

私の知る限り、あなたはこの方法を試さなければなりません-

select * from mytable
   where 
    (
        GLength(
          LineStringFromWKB(
            LineString(
              geoPoint, 
              GeomFromText('POINT(51.5177 -0.0968)')
            )
          )
        )
      ) < 99999999

この回答の詳細。

于 2016-03-17T11:38:28.963 に答える