private final double EARTH_RADIUS = 6378.137;
public double getDistance(double lng1, double lat1, double lng2, double lat2) {
double distance = 0;
double dLat = (lat2 - lat1) * Math.PI / 180;
double dLon = (lng2 - lng1) * Math.PI / 180;
distance = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(lat1 * Math.PI / 180)
* Math.cos(lat2 * Math.PI / 180) * Math.sin(dLon / 2)
* Math.sin(dLon / 2);
distance = (2 * Math.atan2(Math.sqrt(distance), Math.sqrt(1 - distance))) * EARTH_RADIUS;
return Math.round(distance * (double) 1000) / (double) 1000;
}
public void getdistance(){
double distance = Math.sqrt(Math.abs((p1.getX() - p2.getX())* (p1.getX() - p2.getX())+(p1.getY() - p2.getY())* (p1.getY() - p2.getY())));
}
SELECT
t.*,
ROUND(2 * 6378.137 * ASIN(
SQRT(
POW( SIN(3.141592653589793 * (#{lat} - t.latitude ) / 360 ), 2 ) +
COS( 3.141592653589793 * #{lat} / 180 ) * COS( t.latitude * 3.141592653589793 / 180 )
* POW( SIN( 3.141592653589793 * ( #{lon} - t.longitude ) / 360 ), 2 )
)
)
,1) AS distance
FROM
sys_user t
where
#{range}
>=
ROUND(2 * 6378.137 * ASIN(
SQRT(
POW( SIN(3.141592653589793 * (#{lat} - t.latitude ) / 360 ), 2 ) +
COS( 3.141592653589793 * #{lat} / 180 ) * COS( t.latitude * 3.141592653589793 / 180 )
* POW( SIN( 3.141592653589793 * ( #{lon} - t.longitude ) / 360 ), 2 )
)
)
,1)
and
user_type_code = '2'
order by
distance asc
Limit 10
private boolean ptInPolyYOrN(double[] trans, String district) {
boolean isTrue = false;
JSONArray array = JSONUtil.parseArray(district);
for (int i = 0; i < array.size(); i++) {
JSONArray jsonArray = JSONUtil.parseArray(JSONUtil.parseArray(JSONUtil.parseObj(JSONUtil.parseObj(array.get(i)).get("geometry")).get("coordinates")).get(0));
Point[] ps = new Point[jsonArray.size()];
for (int j = 0; j < jsonArray.size(); j++) {
Double lng = (Double) jsonArray.getJSONArray(j).get(0);
Double lat = (Double) jsonArray.getJSONArray(j).get(1);
Point point = new Point(lng, lat);
ps[j] = point;
}
boolean ptInPoly = IsPtInpoly.isPtInPoly(trans[0], trans[1], ps);
if (ptInPoly) {
isTrue = true;
}
}
return isTrue;
}