判断点是否在区域内(经纬度是否在区域内)(方法一)



```
@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));
}
```
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值