Distance between two GPS points

Is there an inbuilt function in PL/SQL for calulating the distance between two GPS (lat/long) points?
I'm using Oracle 9i. There's a thing called SDO_GEOM available, but I'm not sure if this is what its used for or if it's the best option.

If the earth is a complete globe and its circumference is 40000km,
I make the function as follows.
create ore replace
function distance
(a_lat number,a_lon number,b_lat number, b_lon number)
return number is
circum number := 40000; -- kilometers
pai number := acos(-1);
a_nx number;
a_ny number;
a_nz number;
b_nx number;
b_ny number;
b_nz number;
inner_product number;
begin
if (a_lat=b_lat) and (a_lon=b_lon) then
return 0;
else
a_nx := cos(a_lat*pai/180) * cos(a_lon*pai/180);
a_ny := cos(a_lat*pai/180) * sin(a_lon*pai/180);
a_nz := sin(a_lat*pai/180);
b_nx := cos(b_lat*pai/180) * co s(b_lon*pai/180);
b_ny := cos(b_lat*pai/180) * sin(b_lon*pai/180);
b_nz := sin(b_lat*pai/180);
inner_product := a_nx*b_nx + a_ny*b_ny + a_nz*b_nz;
if inner_product > 1 then
return 0;
else
return (circum*acos(inner_product))/(2*pai);
end if;
end if;
end;
I rewrite it by using the factorization and the triangle function's sum and difference formulas:
cos(x-y) = cos(x)cos(y)+sin(x)sin(y)
As result, this function is same to the 1st method of Billy Verreynne.
create or replace
function distance
(a_lat number,a_lon number,b_lat number, b_lon number)
return number is
circum number := 40000; -- kilometers
pai number := acos(-1);
dz number;
dx2y2 number;
inner_product number;
begin
if (a_lat=b_lat) and (a_lon=b_lon) then
return 0;
else
dz := sin(a_lat*pai/180)*sin(b_lat*pai/180);
dx2y2 := cos(a_lat*pai/180)*cos(b_lat*pai/180)*cos((a_lon-b_lon)*pai/180);
inner_product := dz*dz + dx2y2;
if inner_product > 1 then
return 0;
else
return (circum*acos(inner_product))/(2*pai);
end if;
end if;
end;
Message was edited by:
ushitaki

Similar Messages

  • How to measure distance between two points uisng uiaccelerometer

    Hello all,
    I am trying to measure distance between two points.So for that i am used uiaccelerometer but its give only rotation changes. I am moving my whole device from one point to another point so for that all x,y & z changes remain same. So how can get the device movement for that?
    Thank you..

    UIAccelerometer does not give rotation changes, it senses acceleration in each of the 3 axis in g-force units. Moving in a plane from one point to another and stopping will result in a net g-force in that axis of zero. To get distance one has to measure the initial acceleration and then the time before a deceleration is detected. It gets really complicated in real life since the start and stop are not instantaneous.

  • Finding Distance between two zipcodes with longtitude and latitude

    Want to find distance between two zipcodes that have their latitude and longitude stored in a table.
    The table is as follows
    CREATE TABLE distance (zipcode VARCHAR2, LNG NUMBER, LAT NUMBER)
    I couldn't come up with a calculation or understand the mathematical calculation on line.. Can you help me with some stored procedure that will do..?
    Thanks

    There is no logical complexity in your query besides knowing the basics of
    http://en.wikipedia.org/wiki/Spherical_coordinates
    Also, the table name "Distance" cannot be more confusing; what you have is essentially "PointsOnSphere".
    select R*sqrt(
    (sin(pi-p1.lng)*cos(p1.lat)-sin(pi-p2.lng)*cos(p2.lat))* (sin(pi-p1.lng)*cos(p1.lat)-sin(pi-p2.lng)*cos(p2.lat))
    +
    (sin(pi-p1.lng)*sin(p1.lat)-sin(pi-p2.lng)*sin(p2.lat))*
    (sin(pi-p1.lng)*sin(p1.lat)-sin(pi-p2.lng)*sin(p2.lat))
    +
    (cos(pi-p1.lng)-cos(pi-p2.lng))*(cos(pi-p1.lng)-cos(pi-p2.lng))
    from distance p1, distance p2
    where R is the radius of Earth, and pi=3. Don't forget to convert angular degrees into radiants before you plug in them into the query above
    Correction: This was euclidean distance sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2) between the points (x1,y1,z1) and (x2,y2,z2). Spherical distance is
    sqrt(
    (R*(colatitude1-colatitude2))^2+
    (R*sin(colatitude1-colatitude2)*(longtitude1-longtitude2))^2
    Message was edited by:
    Vadim Tropashko

  • How to draw a line(shortest distance)  between two ellipse using SWING

    how to draw a line(should be shortest distance) between two ellipse using SWING
    any help will be appreciated
    regards

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import javax.swing.*;
    import javax.swing.event.MouseInputAdapter;
    public class ELine extends JPanel {
        Ellipse2D.Double red = new Ellipse2D.Double(150,110,75,165);
        Ellipse2D.Double blue = new Ellipse2D.Double(150,50,100,50);
        Line2D.Double line = new Line2D.Double();
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            g2.setPaint(Color.green.darker());
            g2.draw(line);
            g2.setPaint(Color.blue);
            g2.draw(blue);
            g2.setPaint(Color.red);
            g2.draw(red);
        private void connect() {
            double flatness = 0.01;
            PathIterator pit = blue.getPathIterator(null, flatness);
            double[] coords = new double[2];
            double x1 = 0, y1 = 0, x2 = 0, y2 = 0;
            double min = Double.MAX_VALUE;
            while(!pit.isDone()) {
                int type = pit.currentSegment(coords);
                switch(type) {
                    case PathIterator.SEG_MOVETO:
                    case PathIterator.SEG_LINETO:
                        Point2D.Double p = getClosestPoint(coords[0], coords[1]);
                        double dist = p.distance(coords[0], coords[1]);
                        if(dist < min) {
                            min = dist;
                            x1 = coords[0];
                            y1 = coords[1];
                            x2 = p.x;
                            y2 = p.y;
                        break;
                    case PathIterator.SEG_CLOSE:
                        break;
                    default:
                        System.out.println("blue type: " + type);
                pit.next();
            line.setLine(x1, y1, x2, y2);
        private Point2D.Double getClosestPoint(double x, double y) {
            double flatness = 0.01;
            PathIterator pit = red.getPathIterator(null, flatness);
            double[] coords = new double[2];
            Point2D.Double p = new Point2D.Double();
            double min = Double.MAX_VALUE;
            while(!pit.isDone()) {
                int type = pit.currentSegment(coords);
                switch(type) {
                    case PathIterator.SEG_MOVETO:
                    case PathIterator.SEG_LINETO:
                        double dist = Point2D.distance(x, y, coords[0], coords[1]);
                        if(dist < min) {
                            min = dist;
                            p.setLocation(coords[0], coords[1]);
                        break;
                    case PathIterator.SEG_CLOSE:
                        break;
                    default:
                        System.out.println("red type: " + type);
                pit.next();
            return p;
        public static void main(String[] args) {
            final ELine test = new ELine();
            test.addMouseListener(test.mia);
            test.addMouseMotionListener(test.mia);
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(test);
            f.setSize(400,400);
            f.setLocation(200,200);
            f.setVisible(true);
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    Graphics g = test.getGraphics();
                    g.drawString("drag me", 175, 80);
                    g.dispose();
        private MouseInputAdapter mia = new MouseInputAdapter() {
            Point2D.Double offset = new Point2D.Double();
            boolean dragging = false;
            public void mousePressed(MouseEvent e) {
                Point p = e.getPoint();
                if(blue.contains(p)) {
                    offset.x = p.x - blue.x;
                    offset.y = p.y - blue.y;
                    dragging = true;
            public void mouseReleased(MouseEvent e) {
                dragging = false;
            public void mouseDragged(MouseEvent e) {
                if(dragging) {
                    double x = e.getX() - offset.x;
                    double y = e.getY() - offset.y;
                    blue.setFrame(x, y, blue.width, blue.height);
                    connect();
                    repaint();
    }

  • Distance between two objects

    Hi folks,
    Who knows how I can discover the distance between two selected objects without using neither guides nor grids?
    Thanks.

    How do imagine this would working without using guides or grids? The way I normally do it is:
    1. Drag out a guide to point A
    2. Drag out a guide to point B
    3. Hold shift and put the mouse cursoe between the two -- it shows you the distance
    You could also use the measuring tool (click and hold the rectangle tool in the tool pallette.)
    Or even just draw a rectangle and look at the width in the property panel. That's a fast and easy method I use sometimes.
    Aaron Beall
    http://fireworks.abeall.com

  • Is there any css to vary the distance between two items in apex

    Hi,
    Is there any css to vary the distance between two items ie two columns  horizontally / vertically in apex application at page line level
    Regards,
    Pavan

    Hi ,
    I done what u suggested above  but  i ll tel u clearly
    i have name,plot no,street,city,distict,state,country,phone no,pincode items.. i need to align this items like
    --------------------------------------------------------------------------main region----------------------------------------------------------------------------
    --left region-------------------------------------------middle region------------------------------------------------------right region-------------------
    name,___________
    plot no,_________
    street,________
    city,___________                                    distict,_________                                              
    state,__________                                   country,_________                                                  nothing in it
    phone no,__________                              pincode_________
    to achieve this wat i have to do
    Thanks,
    pavan

  • Shortest distance between two line segments

    Hi.
    I am looking for the code of the "Shortest distance between two line segments". I would appreciate if anyone has and willing to share.
    I can find some in the net but its in VB and i am not familiar with it.
    THanks a lot.
    regards,

    There are a couple of things that are not clear:
    What determines the rotation speed and lenght of each stick at any given time?
    What is the program allowed to do to prevent collision (change speed/direction, change radius, stop everything)
    Since you want to prevent collision, you need a predictive algorithm. Once they overlap, the collision has already happened. Too late!
    What information does your algorithm get (e.g. r1, r2, theta1, theta2, delta-thetat1, delta-theta2, etc.), i.e. does the program only get static information and need  to construct the trajectory from sequential history data or does it get dynamic information about speed and direction?
    The trivial answer would be to just keep r1+r2 < distance(P1,P2). This will prevent all "potential" collisions.
    LabVIEW Champion . Do more with less code and in less time .

  • Distance between two PCIe x 16 slot of P55 GD85

    Hello,
    Does anyone have an idea what is the clear distance between two PCIe x 16 slot of P55 GD85? planning to get one if my 2 x GTX 285 with modified cooling fan will fit in. each VGA with modified fan is around 55mm in height.
    thank you,   

    Exactly, there was no "rude" intention or the will to provoke you behind my previous answer.  In fact, I spent 15 minutes to find a ruler in order to measure the port distance on three different ATX Board to make sure I am not telling you anything wrong.  I would not have bothered to do that if I had been planning to write a rude reply. 
    [On the flip side: Personally, I find it kind of rude that you are accusing me of 'rudeness'.  However, I suggest we better drop the whole 'who is really being rude here' discussion.]
    Quote
    The distance between the center lines of two neighbouring slots is always ~ 2.05cm.  There are two slots between the PCI-E-x16 slots of the P55-DG85.  Simply do the math!
    Quote
    I am not a mathematician
    The distance between the center lines of the two PCI-E-x16-slots of the P55-GD85 is ~6.15cm (there are two more slots in between --> 2.05cm x 3).
    This means that this ...
    Quote
    each VGA with modified fan is around 55mm in height.
    ... should actually fit.

  • Distance between two pixel in screen

    Hi all ,
    How can I get the distance between two pixel of the screen .
    Thanks and Regards
    Anshuman Srivastava

    You're welcome. Do spend more time with the API, there are a wealth of methods available in classes like Toolkit, SwingUtilities, Utilities and Robot that help solve many rather obscure problems.
    db

  • How to delete a path between two anchor points

    hi ,
    it's all in the title ,
    could you tell me  please how to delete a path between two anchor points without using the path eraser tool ?
    When I select these two anchor points and press delete everything is gone.
    ps : I want to keep the anchor points after the deletion
    Thank you

    Silkrooster wrote:
    With some experimentation, I did find that selecting the path can leave orphan points. So keep that in mind as it may be necessary to use Object>Path>Clean up...
    You will not get orphan points if you delete a segment that is not at the end of a path.  For segment that is at the end of a path, or is the entire path, select the end point/s and press delete. For the one segment that is entire path you can use the selection tool (black pointer) or hold Alt with the direct selection tool (white pointer) which is useful for objects in a group.

  • Find driving distance between two points without using API by use of Lat & Long?

    Using Google geocode API : http://maps.googleapis.com/maps/api/geocode/xml?address=thane&sensor=true
    We performed get distance between search criteria entered by user and all related clubs by lat & long  stored at db.
    2. Two different points such as  
    (origin: Lat1 & Long1) and (destination: Lat2 & Long2)
    We tried for to get distance between these two points,
     (Lat2 & Long2) to (Lat1 & Long1)
    But distance which we get by calculation is simple straight line distance 
    Origin Destination
    (Lat1 & Long1) (Lat2 & Long2)
    3. This is not driving distance as google shows in exact Km
    4. For that Google provide another API (distancematrix API)
    http://maps.googleapis.com/maps/api/distancematrix/xml?origins=Thane&sensor=true&destinations=khopat&mode=driving&language=en%20-%20EN
    5. But there is limit for DistanceMatrix-Service without ClientID and client key
    100 elements per query.
    100 elements per 10 seconds.
    2 500 elements per 24 hour period.
    But as element request exceeds it shows : OVER_QUERY_LIMIT error  
    6. In case of Client ID and Client key
    In Distance Matrix 100 000 elements per 24 hour period,a maximum of 625 elements per query and a maximum of 1 000 elements per 10 seconds.
    As per this one there is option to get purchase these API but basic question is remain same for us if we are requesting single origin and multiple destination then how element calculation done by google?
    But in document google says :
    Elements
    The information about each origin-destination pairing is returned in an element entry. An element contains the following fields:
    Status: See Status Codes for a list of possible status codes.
    Duration: The duration of this route, expressed in seconds (the value field) and as text. The textual representation is localized according to
    the query's language parameter.
    Distance: The total distance of this route, expressed in meters (value) and as text. The textual value uses the unit system specified with the
    unit parameter of the original request, or the origin's region.

    Any information that you see in a google map webpage can be retrieved using the API.  The best way of finding the tags on the webpage is to manually perform the query using an IE webpage.   Then capture the source and save to a file so you
    can use a text editor to look at results.  I often on a webpage use the menu : View -  Source and then copy the source to a text file.
    jdweng

  • Distance between two points with degrees and minutes

    I would like to store several points in the database given degrees and minutes as position. In this example I have point 1 that is E 150, 0/S 30, 0 and points 2 that is E 150, 0/S 30.1. For example if I enter 2 km as distance from position of point 1 I would like the search to return all points witin 2 km.(should return points 2 that is very near)
    If I run the query
    SELECT c.name
    FROM cola_markets_cs c
    WHERE
    SDO_WITHIN_DISTANCE(c.shape,
    SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(150.0, 30.1, NULL), NULL, NULL),
    'distance=10000 unit=KM')
    = 'TRUE';
    I get result both position 1 and 2, but if I decrease to distance=1000 no rows is returned.
    Can you see what I am doing wrong here?
    Can I also combine SDO_WITHIN_DISTANCE with SDO_NN_DISTANCE so I can ask for all points 10 km in distance from the reference point and I can also see the actual distance for each point?
    Thank you
    I have tested with the following code. Do I save the position wrong..?
    CREATE TABLE cola_markets_cs (
    mkt_id NUMBER PRIMARY KEY,
    name VARCHAR2(32),
    shape MDSYS.SDO_GEOMETRY);
    INSERT INTO cola_markets_cs VALUES (
    1,
    'Point 1',
    MDSYS.SDO_GEOMETRY(
    2001,
    8307,
    MDSYS.SDO_POINT_TYPE(150.0, 30.0, NULL),
    NULL,
    NULL
    INSERT INTO cola_markets_cs VALUES (
    2,
    'Point 2',
    MDSYS.SDO_GEOMETRY(
    2001,
    8307,
    MDSYS.SDO_POINT_TYPE(150.0, 30.1, NULL),
    NULL,
    NULL
    -- UPDATE METADATA VIEW --
    -- Update the USER_SDO_GEOM_METADATA view. This is required
    -- before the Spatial index can be created. Do this only once for each
    -- layer (i.e., table-column combination; here: cola_markets_cs and shape).
    INSERT INTO USER_SDO_GEOM_METADATA
    VALUES (
    'cola_markets_cs',
    'shape',
    MDSYS.SDO_DIM_ARRAY(
    MDSYS.SDO_DIM_ELEMENT('Longitude', -180, 180, 10), -- 10 meters tolerance
    MDSYS.SDO_DIM_ELEMENT('Latitude', -90, 90, 10) -- 10 meters tolerance
    8307 -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
    -- CREATE THE SPATIAL INDEX --
    -- Must be R-tree; quadtree not supported for geodetic data.
    CREATE INDEX cola_spatial_idx_cs
    ON cola_markets_cs(shape)
    INDEXTYPE IS MDSYS.SPATIAL_INDEX;
    --This search only return if distance is 10 000 km...
    SELECT c.name
    FROM cola_markets_cs c
    WHERE
    SDO_WITHIN_DISTANCE(c.shape,
    SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(150.0, 30.1, NULL), NULL, NULL),
    'distance=10000 unit=KM')
    = 'TRUE';
    --According to this search the distance to point 1 is 3331198,72256398,
    --this  should be zero..
    SELECT
    c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
    FROM cola_markets_cs c
    WHERE SDO_NN(c.shape,
    sdo_geometry(2001, 8307,sdo_point_type(150.0, 30.1, NULL), NULL, NULL),
    'sdo_num_res=2', 1) = 'TRUE' ORDER BY dist

    Hi,
    What version of Oracle are you using? I got this using your example:
    SELECT
    c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
    FROM cola_markets_cs c
    WHERE SDO_NN(c.shape,
    sdo_geometry(2001, 8307,sdo_point_type(150.0, 30.1, NULL), NULL, NULL), 'sdo_num_res=2', 1) = 'TRUE'
    ORDER BY dist ;
    MKT_ID NAME DIST
    2 Point 2 0
    1 Point 1 11085.3285
    This is 10.1.0.4
    Also:
    Can I also combine SDO_WITHIN_DISTANCE with SDO_NN_DISTANCE so I can ask for all points 10 km in distance from the reference point and I can also see the actual distance for each point?
    No, but you can add a distance calculation:
    SELECT
    c.mkt_id, c.name, SDO_GEOM.SDO_DISTANCE(c.shape,sdo_geometry(2001, 8307,sdo_point_type(150.0, 30.1, NULL), NULL, NULL),1) dist
    FROM cola_markets_cs c
    WHERE SDO_WITHIN_DISTANCE(c.shape,
    sdo_geometry(2001, 8307,sdo_point_type(150.0, 30.1, NULL), NULL, NULL), 'distance=10 unit=km') = 'TRUE'
    ORDER BY dist ;

  • Straight line between two polar points

    Hi all,
    I've created a VI which would be plotting a polar curve depending on the time-distance formula. The VI has Present Mag. and Target Mag. each having its own angle (Polar form i.e. (r,theta)). I want to plot a straight line between the Present point and the Target point. I used the time-distance formula to plot the magnitude, and used the same slope for plotting angle. However, I get a curved plot as shown in the attachment.
    Could anyone tell me what formula can be used to plot a straight line between the Present point and the Target point?
    Thanks.
    -FraggerFox!
    Certified LabVIEW Architect, Certified TestStand Developer
    "What you think today is what you live tomorrow"
    Solved!
    Go to Solution.
    Attachments:
    Temp.JPG ‏38 KB

    @altenbach....
    how can we do that?
    To say in short,
    I have two points A(magnitude1,phase1[deg]) and B(magnitude2,phase2[deg]) on the input side. Also, I have the Time input to travel from pt.A to pt.B
    I have one polar plot as indicator output.
    I need to show on the polar plot a line which is gradually increasing from pt.A to pt.B in a straight line on the polar plot.
    You may refer the picture attached in the first post above to get an idea of what I am trying to do.
    Thanks!
    Message Edited by Fragger Fox on 01-13-2010 11:01 AM
    -FraggerFox!
    Certified LabVIEW Architect, Certified TestStand Developer
    "What you think today is what you live tomorrow"

  • How can I find out the angle of a straight line between two anchor points?

    I would like to extend a line which is at a given angle (not 45,90 degree). Is there a quick and reliable way to do this? or to find out the angle of a segment?
    What I'm doing at the moment is just direct selecting an anchor point and using the visual guides to extend it. I don't think this is exact though so was I wondering if anyone had any techniques for doing this?
    Thanks!

    portfelio,
    Smart Guides are your friends.
    As a general solution, you may:
    1) With the Line Segment Tool ClickDrag between the two Anchor Points (Smart Guides say anchor);
    2) With the appropriate Reference Point selected in the Transform palette, increase the W or H value and Ctrl/Cmd+Enter;
    3) Lock the new auxiliary line;
    4) ClickDrag the relevant Anchor Point of the original line along the extended auxiliary line (Smart Guides say path);
    5) Unlock and delete the auxiliary line.
    After 1), you may also click the Line Segment Tool to see the angle.
    Or,  in a case with a straight path (segment), you may use the Scale Tool:
    1) (Direct) Select the straight path (segment);
    2) Switch to the Scale Tool and Click the Anchor Point that is to stay, then ClickDrag the one to move (Smart Guides say uniform when you are dragging in the right direction).

  • Calculating distance between Lat Long points

    I'm wondering if anyone out there has done this before in LabVIEW.  Does anyone have a model of the "Great Circle" calculation?  I have a file of lat/long points that I need to calculate the distance between.  Any help??
    V/r,
    Chris

    I haven't done it in LV, but if you go to Wikipedia and search for Great Circle Distance you'll find the formual and an example.

Maybe you are looking for

  • Snow Leopard 10.6.2 and Word 2004

    Since upgrading to Snow Leopard I have found that when I try to Insert Picture into a Word document (Word 2004), the Media browser for Photo no longer works. I can find pictures elsewhere on the disk. I assume Word is not connecting through to the iP

  • Email analysis overview report questions

    hi, please see the attached file. this is an email analysis overview report which shows strange results...: 1. how can the open rate be bigger than 100% ? - the eloqua report guide defines this metrics as # unique opens/# emails delivered, am i missi

  • SmartView member selection problem

    Hi, I am facing an issue in Smartview. I am using SmartView 11.1.2.1. I am unsure if this is how it actually works or if it is an issue. Say, I have the following hierarchy: A has a child B and B has a child C And if the user has access to only A and

  • My Mac is so **** painfully slow..:-(

    Hello, please i need your help. I am using a MacBook Pro with Mavericks installed. I bought this Mac as a used Model early 2013. At this Time Mountain Lions was installed. And it ran perfectly and it worked like a charm..:-) But... After a couple of

  • HP LaserJet Pro 200 Color MFP M276n: Memory low

    Hi, my new M276n printer has memory problems. Print jobs above two pages are being stopped with a "not enough memory" notification. I searched this forum and found a "temporary" fix (reset printer to default settings) and a mysteriously missing Step