import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
/**
* @Date 2023/4/12
* @remark
*/
public class Test {
public static void main(String[] args) {
String lng_lat = "118.123214,33.363985;118.130634,33.364412;118.130203,33.360401;118.127867,33.360733;118.127903,33.364683;";
Map <String,String> map = getCenterPoint(lng_lat);
System.out.println("中心点"+map.get("lng") +","+ map.get("lat"));
}
/**
* 获取多边形中心点
*/
public static Map<String, String> getCenterPoint(String str) {
String[] arr = str.split(";");
int total = arr.length;
double X = 0, Y = 0, Z = 0;
for (int i = 0; i < arr.length; i++) {
double lat, lon, x, y, z;
lon = Double.parseDouble(arr[i].split(",")[0]) * Math.PI / 180;
lat = Double.parseDouble(arr[i].split(",")[1]) * Math.PI / 180;
x = Math.cos(lat) * Math.cos(lon);
y = Math.cos(lat) * Math.sin(lon);
z = Math.sin(lat);
X += x;
Y += y;
Z += z;
}
X = X / total;
Y = Y / total;
Z = Z / total;
double Lon = Math.atan2(Y, X);
double Hyp = Math.sqrt(X * X + Y * Y);
double Lat = Math.atan2(Z, Hyp);
DecimalFormat df = new DecimalFormat("#0.000000");
Map<String, String> map = new HashMap<>();
map.put("lng", df.format(Lon * 180 / Math.PI));
map.put("lat", df.format(Lat * 180 / Math.PI));
return map;
}
}
10-24
3万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)