From cf695c6db30c07e2ea9783f31660936787f67eb9 Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期六, 21 十月 2023 14:06:56 +0800
Subject: [PATCH] 推送入栏

---
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java              |    4 
 ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java                      |   69 +++++++++++++++++
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java          |    7 +
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java |   17 ++++
 ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java                    |    2 
 ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java                   |    2 
 ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java            |    7 +
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java         |   38 ++++++++-
 ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java          |    2 
 ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java                |   18 ++++
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java   |   15 ++-
 ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java         |   41 +++++++++-
 ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java             |    4 +
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java     |    9 ++
 14 files changed, 213 insertions(+), 22 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/oil/controller/OilWallController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java
similarity index 60%
rename from ard-work/src/main/java/com/ruoyi/oil/controller/OilWallController.java
rename to ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java
index 76aa0ea..f69b2e9 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/controller/OilWallController.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/controller/OilWallController.java
@@ -1,10 +1,15 @@
-package com.ruoyi.oil.controller;
+package com.ruoyi.sy.controller;
 
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.UUID;
-import com.ruoyi.oil.domain.ArdOilWall;
-import com.ruoyi.oil.param.OilWallParam;
-import com.ruoyi.oil.service.ArdOilWallService;
+import com.ruoyi.sy.domain.ArdOilWall;
+import com.ruoyi.sy.param.OilWallParam;
+import com.ruoyi.sy.service.ArdOilWallService;
+import com.ruoyi.sy.domain.ArdSyCar;
+import com.ruoyi.sy.domain.ArdSyUser;
+import com.ruoyi.sy.service.IArdSyCarService;
+import com.ruoyi.sy.service.IArdSyUserService;
+import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.utils.result.Results;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,6 +17,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author Administrator
@@ -23,6 +29,15 @@
 
     @Autowired
     private ArdOilWallService ardOilWallService;
+
+    @Autowired
+    private IArdSyCarService carService;
+
+    @Autowired
+    private IArdSyUserService iArdSyUserService;
+
+    @Autowired
+    private ISysConfigService sysConfigService;
 
     @PostMapping("/add")
     @ApiOperation("娣诲姞鐢靛瓙鍥存爮")
@@ -59,4 +74,22 @@
         return Results.succeed(ardOilWallService.query(oilWallParam));
     }
 
+    @GetMapping("/wallCar")
+    @ApiOperation("鎵�鏈夎繘鍏ュ洿鏍忕殑杞﹁締")
+    public Results wallCar(){
+        //鏌ヨ鎵�鏈夊凡鎸傝浇鐨勮溅杈�
+        List<ArdSyCar> carList = carService.all();
+        //鑾峰彇杞﹁締浣嶇疆
+        String usersId = SecurityUtils.getUserId();
+        ArdSyUser ardSyUser = iArdSyUserService.userById(usersId);
+        String syURL = sysConfigService.getSYURL();
+        for (int i = 0; i < carList.size(); i++) {
+            String carId = carList.get(i).getCarId();
+            carService.getCarGPSBycarId(usersId,carId,syURL,ardSyUser);
+        }
+
+        return Results.succeed();
+    }
+
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java
new file mode 100644
index 0000000..7d86125
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdAccessFence.java
@@ -0,0 +1,18 @@
+package com.ruoyi.sy.domain;
+
+import lombok.Data;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class ArdAccessFence {
+    private String id;
+    private String carId;
+    private String carName;
+    private String deptId;
+    private String deptName;
+    private String lng;
+    private String lat;
+    private String time;
+}
diff --git a/ard-work/src/main/java/com/ruoyi/oil/domain/ArdOilWall.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java
similarity index 96%
rename from ard-work/src/main/java/com/ruoyi/oil/domain/ArdOilWall.java
rename to ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java
index fb23a1a..4a0d146 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/domain/ArdOilWall.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdOilWall.java
@@ -1,4 +1,4 @@
-package com.ruoyi.oil.domain;
+package com.ruoyi.sy.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
index 9be6f79..cf6e07b 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -13,15 +13,16 @@
 import com.gps31.push.netty.client.TcpClient;
 import com.gps31.push.util.MapUtil;
 import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.sy.domain.ArdOilWall;
+import com.ruoyi.sy.service.impl.ArdOilWallServiceImpl;
 import com.ruoyi.sy.service.impl.ArdSyCarDayServiceImpl;
 import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl;
+import com.ruoyi.utils.gps.GeoTools;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.awt.geom.Point2D;
+import java.util.*;
 
 /**
  * <p>Description: </p>
@@ -72,12 +73,37 @@
             Map<String,Object> gpsMap = pushMsg.getJsonMap();
             /*String carName = MapUtil.getStrVal(gpsMap, "carName","");//鑾峰彇杞︾墝鍙�
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            System.out.println(sdf.format(new Date()));
-            log.error(String.format("   ---->鏀跺埌瀹氫綅鏁版嵁:%s",JSON.toJSONString(gpsMap)));*/
+            System.out.println(sdf.format(new Date()));*/
+//            log.error(String.format("   ---->鏀跺埌瀹氫綅鏁版嵁:%s",JSON.toJSONString(gpsMap)));
             String carId = (String)gpsMap.get("carId");
             ((ArdSyCarDayServiceImpl)SpringUtils.getBean("ardSyCarDayServiceImpl")).insertArdSyCarDay(carId);//鏂板杞﹁締涓婃姤鏃堕棿
             Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//鏌ヨ杞﹁締鍙婇儴闂�
+//            log.error("---------------------"+result);
             if(result != null){
+                //娓呮筏瀹氫綅
+                String lng = (String) gpsMap.get("lng");//鑾峰彇缁忓害
+                String lat = (String) gpsMap.get("lat");//鑾峰彇绾害
+                String carName = (String) gpsMap.get("carName");//鑾峰彇杞︾墝鍙�
+                String time = (String) gpsMap.get("result");//瀹氫綅鏃堕棿
+                String deptNum = (String) result.get("deptId");//鑾峰彇閮ㄩ棬ID
+                String deptName = (String) result.get("deptName");//鑾峰彇閮ㄩ棬鍚嶇О
+                //瀹氫箟2缁寸┖闂�
+                Point2D.Double point = new Point2D.Double(Double.parseDouble(lng), Double.parseDouble(lat));
+                List<Point2D.Double> pts = new ArrayList<Point2D.Double>();
+                //鍖归厤鍏ㄩ儴鍥存爮
+                List<ArdOilWall> ardOilWalls = ((ArdOilWallServiceImpl)SpringUtils.getBean("ArdOilWallServiceImpl")).all();
+                for (int i = 0; i < ardOilWalls.size(); i++) {
+                    pts.clear();
+                    ArdOilWall ardOilWall = ardOilWalls.get(i);
+                    String[] coord = ardOilWall.getCoord().split(",");
+                    for (int j = 0; j < coord.length; j = j + 3) {
+                        pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j+1])));
+                    }
+                    if(GeoTools.IsPtInPoly(point, pts)){
+                        //杩涘叆浜嗗洿鏍忓叆搴�
+
+                    }
+                }
                 gpsMap.putAll(result);
                 String ancestors = (String) gpsMap.get("ancestors");//鑾峰彇鐖剁骇閮ㄩ棬
                 String[] ancestorsArray = ancestors.split(",");
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java
new file mode 100644
index 0000000..3c8ddb4
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdAccessFenceMapper.java
@@ -0,0 +1,7 @@
+package com.ruoyi.sy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.sy.domain.ArdAccessFence;
+
+public interface ArdAccessFenceMapper extends BaseMapper<ArdAccessFence> {
+}
diff --git a/ard-work/src/main/java/com/ruoyi/oil/mapper/ArdOilWallMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java
similarity index 69%
rename from ard-work/src/main/java/com/ruoyi/oil/mapper/ArdOilWallMapper.java
rename to ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java
index 61c8f58..dac48f3 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/mapper/ArdOilWallMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdOilWallMapper.java
@@ -1,7 +1,7 @@
-package com.ruoyi.oil.mapper;
+package com.ruoyi.sy.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.oil.domain.ArdOilWall;
+import com.ruoyi.sy.domain.ArdOilWall;
 
 /**
  * @author Administrator
diff --git a/ard-work/src/main/java/com/ruoyi/oil/param/OilWallParam.java b/ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java
similarity index 78%
rename from ard-work/src/main/java/com/ruoyi/oil/param/OilWallParam.java
rename to ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java
index f88923a..0a0207c 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/param/OilWallParam.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/param/OilWallParam.java
@@ -1,4 +1,4 @@
-package com.ruoyi.oil.param;
+package com.ruoyi.sy.param;
 
 import lombok.Data;
 
diff --git a/ard-work/src/main/java/com/ruoyi/oil/service/ArdOilWallService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java
similarity index 68%
rename from ard-work/src/main/java/com/ruoyi/oil/service/ArdOilWallService.java
rename to ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java
index 4b447a8..a68c36d 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/service/ArdOilWallService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/ArdOilWallService.java
@@ -1,8 +1,8 @@
-package com.ruoyi.oil.service;
+package com.ruoyi.sy.service;
 
 
-import com.ruoyi.oil.domain.ArdOilWall;
-import com.ruoyi.oil.param.OilWallParam;
+import com.ruoyi.sy.domain.ArdOilWall;
+import com.ruoyi.sy.param.OilWallParam;
 
 import java.util.List;
 
@@ -15,4 +15,5 @@
     int updOilWall(ArdOilWall ardOilWall);
     ArdOilWall one(String id);
     List<ArdOilWall> query(OilWallParam oilWallParam);
+    List<ArdOilWall> all();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
index 1bb5e26..ee2e272 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -1,5 +1,6 @@
 package com.ruoyi.sy.service;
 
+import com.ruoyi.sy.domain.ArdAccessFence;
 import com.ruoyi.sy.domain.ArdSyCarLock;
 import com.ruoyi.sy.domain.ArdSyCarRtu;
 import com.ruoyi.sy.vo.CarLockVo;
@@ -33,4 +34,5 @@
     RtuVo updRtu(String carId);
     int updRtuCar(ArdSyCarRtu ardSyCarRtu);
 
+    int access(ArdAccessFence ardAccessFence);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
index e2d1987..3e2c167 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -4,6 +4,7 @@
 import java.util.Map;
 
 import com.ruoyi.scheduling.domian.SchedulingParam;
+import com.ruoyi.sy.domain.ArdAccessFence;
 import com.ruoyi.sy.domain.ArdSyCar;
 import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.utils.result.Results;
@@ -143,4 +144,7 @@
      * 鑾峰彇闄勮繎鑼冨洿鍐呯殑杞﹁締淇℃伅(澶氳竟褰�)
      * */
     List<Map<String, Object>> getNearCarWithPolygon(SchedulingParam param);
+
+    List<ArdSyCar> all();
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/oil/service/impl/ArdOilWallServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java
similarity index 79%
rename from ard-work/src/main/java/com/ruoyi/oil/service/impl/ArdOilWallServiceImpl.java
rename to ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java
index feef9fd..64e0b07 100644
--- a/ard-work/src/main/java/com/ruoyi/oil/service/impl/ArdOilWallServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdOilWallServiceImpl.java
@@ -1,10 +1,10 @@
-package com.ruoyi.oil.service.impl;
+package com.ruoyi.sy.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ruoyi.oil.domain.ArdOilWall;
-import com.ruoyi.oil.mapper.ArdOilWallMapper;
-import com.ruoyi.oil.service.ArdOilWallService;
-import com.ruoyi.oil.param.OilWallParam;
+import com.ruoyi.sy.domain.ArdOilWall;
+import com.ruoyi.sy.mapper.ArdOilWallMapper;
+import com.ruoyi.sy.service.ArdOilWallService;
+import com.ruoyi.sy.param.OilWallParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -46,4 +46,9 @@
                 .eq(oilWallParam.getType()!=null,"type",oilWallParam.getType());
         return ardOilWallMapper.selectList(queryWrapper);
     }
+
+    @Override
+    public List<ArdOilWall> all() {
+        return ardOilWallMapper.selectList(null);
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
index 9af588b..7c1c0b2 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -2,9 +2,11 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.sy.domain.ArdAccessFence;
 import com.ruoyi.sy.domain.ArdSyCar;
 import com.ruoyi.sy.domain.ArdSyCarLock;
 import com.ruoyi.sy.domain.ArdSyCarRtu;
+import com.ruoyi.sy.mapper.ArdAccessFenceMapper;
 import com.ruoyi.sy.mapper.ArdSyCarLockMapper;
 import com.ruoyi.sy.mapper.ArdSyCarMapper;
 import com.ruoyi.sy.mapper.ArdSyCarRtuMapper;
@@ -34,6 +36,8 @@
     private ArdSyCarRtuMapper rtuMapper;
     @Autowired
     private ArdSyCarLockMapper lockMapper;
+    @Autowired
+    private ArdAccessFenceMapper ardAccessFenceMapper;
 
     @Override
     public List<CarVo> car() {
@@ -160,6 +164,19 @@
         return ardSyCarMapper.updateById(ardSyCar);
     }
 
+    @Override
+    public int access(ArdAccessFence ardAccessFence) {
+        int num = 0;
+        String carId = ardAccessFence.getCarId();
+        QueryWrapper<ArdAccessFence> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("car_id",carId);
+        ArdAccessFence ardAccessFence1 = ardAccessFenceMapper.selectOne(queryWrapper);
+        if(ardAccessFence1==null){
+            num = ardAccessFenceMapper.insert(ardAccessFence);
+        }
+        return num;
+    }
+
     public List<CarVo> carAnalysis(List<ArdSyCar> ardSyCars){
         List<CarVo> list = new ArrayList<>();
         for (int i = 0; i < ardSyCars.size(); i++) {
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
index cc5c32b..479655e 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -17,6 +17,7 @@
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.sy.domain.ArdAccessFence;
 import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.gis.Point;
 import com.ruoyi.scheduling.domian.SchedulingParam;
@@ -1163,4 +1164,12 @@
         }
         return filteredList;
     }
+
+    @Override
+    public List<ArdSyCar> all() {
+        QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ne("reserved_1","");
+        return ardSyCarMapper.selectList(queryWrapper);
+    }
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java b/ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java
new file mode 100644
index 0000000..e9470aa
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/gps/GeoTools.java
@@ -0,0 +1,69 @@
+package com.ruoyi.utils.gps;
+
+import java.awt.geom.Point2D;
+import java.util.List;
+
+public class GeoTools {
+	public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
+		int N = pts.size();
+	    boolean boundOrVertex = true; //濡傛灉鐐逛綅浜庡杈瑰舰鐨勯《鐐规垨杈逛笂锛屼篃绠楀仛鐐瑰湪澶氳竟褰㈠唴锛岀洿鎺ヨ繑鍥瀟rue
+	    int intersectCount = 0;//cross points count of x 
+	    double precision = 2e-10; //娴偣绫诲瀷璁$畻鏃跺�欎笌0姣旇緝鏃跺�欑殑瀹瑰樊
+	    Point2D.Double p1, p2;//neighbour bound vertices
+	    Point2D.Double p = point; //褰撳墠鐐�
+	    
+	    p1 = pts.get(0);//left vertex        
+	    for(int i = 1; i <= N; ++i){//check all rays            
+	        if(p.equals(p1)){
+	            return boundOrVertex;//p is an vertex
+	        }
+	        
+	        p2 = pts.get(i % N);//right vertex            
+	        if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){//ray is outside of our interests                
+	            p1 = p2; 
+	            continue;//next ray left point
+	        }
+	        
+	        if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){//ray is crossing over by the algorithm (common part of)
+	            if(p.y <= Math.max(p1.y, p2.y)){//x is before of ray                    
+	                if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){//overlies on a horizontal ray
+	                    return boundOrVertex;
+	                }
+	                
+	                if(p1.y == p2.y){//ray is vertical                        
+	                    if(p1.y == p.y){//overlies on a vertical ray
+	                        return boundOrVertex;
+	                    }else{//before ray
+	                        ++intersectCount;
+	                    } 
+	                }else{//cross point on the left side                        
+	                    double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;//cross point of y                        
+	                    if(Math.abs(p.y - xinters) < precision){//overlies on a ray
+	                        return boundOrVertex;
+	                    }
+	                    
+	                    if(p.y < xinters){//before ray
+	                        ++intersectCount;
+	                    } 
+	                }
+	            }
+	        }else{//special case when ray is crossing through the vertex                
+	            if(p.x == p2.x && p.y <= p2.y){//p crossing over p2                    
+	                Point2D.Double p3 = pts.get((i+1) % N); //next vertex                    
+	                if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){//p.x lies between p1.x & p3.x
+	                    ++intersectCount;
+	                }else{
+	                    intersectCount += 2;
+	                }
+	            }
+	        }            
+	        p1 = p2;//next ray left point
+	    }
+	    
+	    if(intersectCount % 2 == 0){//鍋舵暟鍦ㄥ杈瑰舰澶�
+	        return false;
+	    } else { //濂囨暟鍦ㄥ杈瑰舰鍐�
+	        return true;
+	    }
+	}
+}

--
Gitblit v1.9.3