```
@Data
public class ScopeRequest {
private Double longitude;
private Double latitude;
}
```
```java
/**
* 使用Path2D创建一个多边形
* @param polygon 经纬度 集合
* @return 返回Path2D.Double
*/
private Path2D.Double createPolygon(List<ScopeRequest> polygon) {
//创建path2D对象
Path2D.Double generalPath = new Path2D.Double();
//获取第一个起点经纬度的坐标
ScopeRequest first = polygon.get(0);
//通过移动到以double精度指定的指定坐标,把第一个起点添加到路径中
generalPath.moveTo(first.getLongitude(), first.getLatitude());
//把集合中的第一个点删除防止重复添加
polygon.remove(0);
//循环集合里剩下的所有经纬度坐标
for (ScopeRequest d : polygon) {
//通过从当前坐标绘制直线到以double精度指定的新指定坐标,将路径添加到路径。
//从第一个点开始,不断往后绘制经纬度点
generalPath.lineTo(d.getLongitude(), d.getLatitude());
}
// 最后要多边形进行封闭,起点及终点
generalPath.lineTo(first.getLongitude(), first.getLatitude());
//将直线绘制回最后一个 moveTo的坐标来关闭当前子路径。
generalPath.closePath();
return generalPath;
}
/**
* 判断点是否在区域内
* @param longitude 经度
* @param latitude 纬度
* @return 返回true跟false
*/
public boolean isPoint(Path2D path2D,Double longitude,Double latitude) {
//true如果指定的坐标在Shape边界内; 否则为false 。
return path2D.contains(longitude, latitude);
}
/**
* 创建Path2D对象
* @return Path2D
*/
public Path2D createPath2D() {
List<ScopeRequest> list = null;
BufferedReader reader;
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("**.txt");
try {
if (resourceAsStream !=null){
reader = new BufferedReader(new InputStreamReader(resourceAsStream));
StringBuilder sb = new StringBuilder();
String s = "";
while ((s =reader.readLine()) != null) {
sb.append(s).append("\n");
}
reader.close();
JSONArray jsonArray = JSON.parseArray(String.valueOf(sb));
list = JSON.parseArray(jsonArray.toJSONString(), ScopeRequest.class);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return createPolygon(Objects.requireNonNull(list));
}
```
判断点是否在区域内(经纬度是否在区域内)(方法一)
于 2024-04-27 10:15:52 首次发布