给定纬度,经度和半径,找到该区域中的所有联系人。但该表仅包含纬度经度列

时间:2018-05-10 11:42:25

标签: plsql plsqldeveloper

解决方案可以找到最小和最大纬度和经度。 然后使用select查询中的between条件来获取结果。 但是我如何获得pl / sql中的最大和最小纬度和经度。

1 个答案:

答案 0 :(得分:1)

我认为你没有plsql问题,你需要一个公式。这里有一些plsql代码,它们对pythagorean定理进行了计算(https://en.wikipedia.org/wiki/Pythagorean_theorem):

declare
    v_yourX NUMBER := 0;
    v_yourY NUMBER := 0;

    v_anotherX NUMBER := 0;
    v_anotherY NUMBER := 1;

    v_diffX NUMBER;
    v_diffY NUMBER;

    v_distance NUMBER;
begin
    v_diffX := v_yourX - v_anotherX;
    v_diffY := v_yourY - v_anotherY;

    v_distance := sqrt(v_diffX*v_diffX + v_diffY*v_diffY);

    dbms_output.put_line('Distance: ' || v_distance); 
end;

您想从数据库中选择一些内容。这是一个如何使用单个查询执行此操作的示例:

SELECT t.*, sqrt(t.posX*t.posX + t.posY+posY) as distance FROM
(
    select (0 - :yourX) posX, (0 - :yourY) posY from dual UNION ALL -- fake-table
    select (1 - :yourX) posX, (2 - :yourY) posY from dual UNION ALL
    select (2 - :yourX) posX, (10 - :yourY) posY from dual
) t
WHERE sqrt(t.posX*t.posX + t.posY+posY) < :maxDistance