4

我正在寻找一个免费的 java API,它提供了计算 GPS 坐标之间距离的基本功能。我需要两点之间的基本 getDistance,即围绕点的半径范围内的兴趣点。
我做了一些研究,一方面发现了一些选择。

一方面有 Apache SIS(http://incubator.apache.org/sis/index.html),但这仍在开发中,可能会改变一些。另一方面是 GeoTools ( http://docs.geotools.org/ ),但这对我的需要来说相当复杂。

还有其他易于使用且更简单的 API 吗?

另一种选择是自己简单地实现所有这些,我已经看到了一些自己的实现示例,但它们都有一些类似的评论:“这实际上不起作用,它提供的距离相差 100米”。这样的实现有多可靠?

4

6 回答 6

8

使用 GeoTools 和 Maven,应该不会太难。Maven 将处理依赖项。幸运的是,您不需要整个 Geotools 套件来进行“无头”计算。

我希望这是你正在寻找的。

绒球:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.bar</groupId>
  <artifactId>geo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <repositories>
    <repository>
      <id>maven2-repository.dev.java.net</id>
      <name>Java.net repository</name>
      <url>http://download.java.net/maven/2</url>
    </repository>
    <repository>
      <id>osgeo</id>
      <name>Open Source Geospatial Foundation Repository</name>
      <url>http://download.osgeo.org/webdav/geotools/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <id>opengeo</id>
      <name>OpenGeo Maven Repository</name>
      <url>http://repo.opengeo.org</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.geotools</groupId>
      <artifactId>gt-referencing</artifactId>
      <version>9.0</version>
    </dependency>
  </dependencies>
</project>

编码:

package org.bar;

import org.geotools.referencing.GeodeticCalculator;
import java.awt.geom.Point2D;

/**
 * How far is NY from London ?
 */
public class DistanceTest {

  public final static void main(final String[] args) {
    final GeodeticCalculator calc = new GeodeticCalculator();

    final Point2D london = new Point2D.Double(-0.127512, 51.507222);
    final Point2D ny = new Point2D.Double(-73.94, 40.67 );
    calc.setStartingGeographicPoint(london);
    calc.setDestinationGeographicPoint(ny);

    System.out.println("Distance London-NY: " + calc.getOrthodromicDistance()/1000 + " kms");
  }

}
于 2013-04-10T15:00:41.850 回答
1

你试过http://www.dinopolis.org/gpsylon/吗?我提供以下功能:

  • 测量距离。
  • 位置标记
于 2013-04-10T13:52:00.753 回答
1

看看Geocalc

//Kew
Coordinate lat = new DegreeCoordinate(51.4843774);
Coordinate lng = new DegreeCoordinate(-0.2912044);
Point kew = new Point(lat, lng);

//Richmond, London
lat = new DegreeCoordinate(51.4613418);
lng = new DegreeCoordinate(-0.3035466);
Point richmond = new Point(lat, lng);

double distance = EarthCalc.getVincentyDistance(richmond, kew); //in meters
double bearing = EarthCalc.getVincentyBearing(kew, richmond); //in decimal degrees
于 2015-08-20T19:46:43.500 回答
0

OpenStreetMaps ( http://www.openstreetmap.us/ ) 有一些非常有用的免费且易于使用的 API。

于 2013-04-10T14:01:18.970 回答
0

以下是您可能会发现有用的面向位置的 API 集合:

https://www.temboo.com/library/keyword/location/

根据您的问题,最适合的是 Google Distance Matrix API。API 文档在这里:https ://developers.google.com/maps/documentation/distancematrix/

于 2013-04-10T15:06:49.183 回答
-1

我赞成大地测量学

它仅由 7 个类组成。所以它完全易于使用。

于 2015-10-14T11:37:37.887 回答