polygon java_JAVA Polygon 在配送区域超区校验的实践
業務背景
物流同城配送,在用戶下單的時候會進行配送超區校驗,前端會將用戶的定位傳入后臺服務,后臺服務針對商家的自定義配送區域(通過地圖控件拖拽出來的不規則圖形)進行校驗。
實現方案
利用java se工具類來做 java.awt.Polygon
使用到的api主要有:
public Polygon(int[] xpoints,int[] ypoints,int npoints)
Parameters:
xpoints - an array of X coordinates 所有點的x坐標
ypoints - an array of Y coordinates 所有點的y坐標
npoints - the total number of points in the Polygon 總共的點數
scene:
把商家通過地圖拖拽的多邊形各點傳入進來,實例化Polygon對象
public boolean contains(double x,double y)
Parameters:
x - the specified X coordinate to be tested x坐標
y - the specified Y coordinate to be tested y坐標
scene:
獲取用戶當前定位的經緯度,作為x,y坐標系傳入進行判斷
使用示例
判斷規則矩形包含點
/**
* 用例描述:測試場景 多邊形為矩形 判斷點是否在范圍內
*
*
* @since 2016-12-06 by 青芒
*/
@Test
public void test_rec_ContainsPoint(){
try {
int[] xpoints = {1,1,5,5};
int[] ypoints = {1,5,5,1};
Polygon polygon = new Polygon(xpoints, ypoints,4);
boolean contains;
Point p = new Point(2,2);
contains = polygon.contains(p);
Assert.assertTrue(contains);
contains = polygon.contains(2, 2);
Assert.assertTrue(contains);
contains = polygon.contains(1, 4);
Assert.assertTrue(contains);
contains = polygon.contains(2, 2);
Assert.assertTrue(contains);
contains = polygon.contains(2.5, 2.5);
Assert.assertTrue(contains);
} catch (Exception e) {
Assert.fail();
}
}
判斷規則矩形包含矩形(拓展下,當前場景用不到)
/**
* 用例描述:測試場景 多邊形為矩形 判斷矩形是否在范圍內
*
*
* @since 2016-12-06 by 青芒
*/
@Test
public void test_rec_ContainsRectangle(){
try {
int[] xpoints = {1,1,5,5};
int[] ypoints = {1,5,5,1};
Polygon polygon = new Polygon(xpoints, ypoints,4);
Rectangle2D rectangle = new Rectangle(2,2,1,1);
boolean contains = polygon.contains(rectangle);
Assert.assertTrue(contains);
} catch (Exception e) {
Assert.fail();
}
}
判斷不規則圖形包含點
/**
* 用例描述:測試場景 不規則多邊形 包含點
*
*
* @since 2016-12-06 by 青芒
*/
@Test
public void test_polygon_ContainsPoint(){
try {
int[] xpoints = {1,2,4,1,2};
int[] ypoints = {3,4,3,3,2};
Polygon polygon = new Polygon(xpoints, ypoints,5);
boolean contains = polygon.contains(3, 3 );
Assert.assertTrue(contains);
contains = polygon.contains(2, 1);
Assert.assertFalse(contains);
} catch (Exception e) {
Assert.fail();
}
}
判斷交叉不規則多邊形包含點
/**
* 用例描述:測試場景 交叉多邊形 包含點
*
*
* @since 2016-12-06 by 青芒
*/
@Test
public void test_crossing_ContainsPoint(){
try {
int[] xpoints = {1,2,1,3,3};
int[] ypoints = {1,2,3,3,1};
Polygon polygon = new Polygon(xpoints, ypoints,5);
boolean contains = polygon.contains(2, 2 );
Assert.assertTrue(contains);
contains = polygon.contains(2, 1 );
Assert.assertTrue(contains);
contains = polygon.contains(2, 1.5);
Assert.assertTrue(contains);
contains = polygon.contains(2.5, 2.5 );
Assert.assertTrue(contains);
//多邊形外圍
contains = polygon.contains(0, 1);
Assert.assertFalse(contains);
contains = polygon.contains(1, 2);
Assert.assertFalse(contains);
contains = polygon.contains(3, 2);
Assert.assertFalse(contains);
} catch (Exception e) {
Assert.fail();
}
}
結束
至此對于該超區校驗場景的實踐已經介紹完畢,使用起來也不難,主要是讓大家知道通過javase 的awt類也是可以容易實現的。
總結
以上是生活随笔為你收集整理的polygon java_JAVA Polygon 在配送区域超区校验的实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java基础案例4-2饲养员喂养动物
- 下一篇: ThinkSNS/ThinkSNS后台应