最接近点对的算法java_java – 找到最近点(几何点)

当我有几何点时,我想计算起点(参考)的最近点.

我出于这个原因使用ports.shp文件.

代码大部分时间都有效.但有时它返回null minDistPoint为null.我不确定初始化minDist有什么价值.

public Point findNearestPoint( Point p, SimpleFeatureCollection features ) throws FactoryException, TransformException {

Point destination = null;

double minDist = 10.0e+6;

double distance = 0;

Point minDistPoint = null;

try( SimpleFeatureIterator itr = features.features()) {

while( itr.hasNext()) {

SimpleFeature feature = itr.next();

final String EPSG4326 =

"GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\","+

"SPHEROID[\"WGS 84\",6378137,298.257223563,"+

"AUTHORITY[\"EPSG\",\"7030\"]],"+

"AUTHORITY[\"EPSG\",\"6326\"]]," +

"PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],"+

"UNIT[\"degree\", " +"0.01745329251994328,"+

"AUTHORITY[\"EPSG\",\"9122\"]],"+

"AUTHORITY[\"EPSG\",\"4326\"]]";

CoordinateReferenceSystem crs = CRS.parseWKT(EPSG4326);

destination = (Point) feature.getDefaultGeometry();

GeodeticCalculator gc = new GeodeticCalculator(crs);

gc.setStartingPosition(

JTS.toDirectPosition( p.getCoordinate(), crs));

gc.setDestinationPosition(

JTS.toDirectPosition( dest.getCoordinate(), crs));

distance = gc.getOrthodromicDistance();

if( distance < minDist ) {

minDist = distance;

minDistPoint = destination;

lastMatched = feature;

}

}

}

int totalmeters = (int) minDist;

int km = totalmeters / 1000;

int meters = totalmeters - (km * 1000);

float remaining_cm = (float) (minDist - totalmeters) * 10000;

remaining_cm = Math.round(remaining_cm);

float cm = remaining_cm / 100;

System.out.println(

"Distance = " + km + "km " + meters + "m " + cm + "cm");

if( minDistPoint == null ) {

return null;

}

return minDistPoint;

}

最佳答案 要使每个算法找到最小值,您应始终将初始值设置为设置的第一个值或可实现的最大值.

在您的情况下,由于您使用的是double,因此可以使用Double.POSITIVE_INFINITY作为初始值,这样您就可以确保至少第一次if条件为真.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值