地理空间四角点坐标计算

当给定一个Point(x,y)和距离时如何计算四角点的坐标

需要引入 spatial4j 包

<dependency>
<groupId>com.spatial4j</groupId>
<artifactId>spatial4j</artifactId>
<version>0.5</version>
</dependency>

  

//方法一 通过 DistanceUtils计算

public
static Rect2D CalAroundSearchBound(Point ptCenter, int iRadius) { /* // 若半径超过最大检索范围则重置为最大检索范围 if (iRadius > AROUND_SEARCH_RADIUS_MAX) { iRadius = AROUND_SEARCH_RADIUS_MAX; }*/ // 防止误差,增加50米 iRadius += 50; // 换算为英里 double dRadiusMiles = (iRadius / 1000.0) * DistanceUtils.KM_TO_DEG; // 计算以该半径为矩形的对角线长度半径 dRadiusMiles = Math.sqrt(2 * dRadiusMiles * dRadiusMiles); Rectangle rc = DistanceUtils.calcBoxByDistFromPtDEG( ptCenter.getY() ,ptCenter.getX(), dRadiusMiles, ctx, null) ;// 维度 经度 半径范围 Rect2D rcBound = new Rect2D(); rcBound.m_dLeft = rc.getMinX() ;// getMinPoint().getX(); rcBound.m_dBottom = rc.getMinY();//getMinPoint().getY(); rcBound.m_dRight = rc.getMaxX();//getMaxPoint().getX(); rcBound.m_dTop = rc.getMaxY();//getMaxPoint().getY(); return rcBound; }
// 方法2 
double lon = 116.312528, lat = 39.983733;
// 千米
int radius = 1;

SpatialContext geo = SpatialContext.GEO;
Rectangle rectangle = geo.getDistCalc().calcBoxByDistFromPt( geo.makePoint(lon, lat), radius * DistanceUtils.KM_TO_DEG, geo, null);
System.out.println(rectangle.getMinX() + "-" + rectangle.getMaxX());// 经度范围
System.out.println(rectangle.getMinY() + "-" + rectangle.getMaxY());// 纬度范围

 

posted @ 2017-06-21 15:00  王南辉  阅读(1247)  评论(0编辑  收藏  举报