vue使用高德地图画电子围栏_电子围栏的实现(二):几何路径法(推荐)

在Java语言的开发环境中,提供了一种便捷的方法。类java.awt..geom.GeneralPath提供了根据直线、二次曲线和三次曲线构造的几何路径的方法,同时GeneralPath类继承类Path2D,通过Path2D类提供的方法contains(double x,double y)来判断某个点是否在曲线或直线构成的边界内。

package com.test;

import java.awt.geom.GeneralPath;

import java.awt.geom.Point2D;

import java.util.ArrayList;

import java.util.List;

public class ElectronicFence {

/**

* 测试一个点是否在多边形内

* @param args

*/

public static void main(String[] args) {

//点在多边形内

Point2D.Double point = new Point2D.Double(116.395, 39.910);

//点在多边形外

//Point2D.Double point = new Point2D.Double(116.404072, 39.916605);

List polygon = new ArrayList();

polygon.add(new Point2D.Double(116.395, 39.910));

polygon.add(new Point2D.Double(116.394, 39.914));

polygon.add(new Point2D.Double(116.403, 39.920));

polygon.add(new Point2D.Double(116.402, 39.914));

polygon.add(new Point2D.Double(116.410, 39.913));

if(polygon.contains(point)){

System.out.println("点在多边形内");

}else{

System.out.println("点在多边形外");

}

}

/**

* 判断点是否在多边形内

* 步骤:

* ①声明一个“画笔”

* ②将“画笔”移动到多边形的第一个顶点

* ③用“画笔”按顺序将多边形的顶点连接起来

* ④用“画笔”将多边形的第一个点连起来,最终形成一个封闭的多边形

* ⑤用contains()方法判断点是否在多边形区域内

* @param polygon多边形

* @param point检测点

* @return点在多边形内返回true,否则返回false

*/

public static boolean contains(List polygon, Point2D.Double point){

GeneralPath p = new GeneralPath();

Point2D.Double first = polygon.get(0);

p.moveTo(first.x, first.y);

for(Point2D.Double d : polygon){

p.lineTo(d.x, d.y);

}

p.lineTo(first.x, first.y);

p.closePath();

return p.contains(point);

}

}

其中p为构造的GeneralPath对象,polygon包含了多边形顶点的List对象,每个顶点被定义为Point2D.Double类型。point则是要判断的点,其类型也为Point2D.Double。p.contains(point)返回true则表示点point包含在多边形polygon内。

转载自:https://blog.csdn.net/Johnson8702/article/details/82150371

你可能感兴趣的:(vue使用高德地图画电子围栏)