地圖演算法(二):判斷當前點是不是在該多邊形上
import java.io.PrintStream;
import java.text.DecimalFormat;
//多邊形演算法
public class PolygonAreaJudge {
private Polygon polygon;
private int rate = 1000000;
private double maxX = 0.0D;
private double minX = 0.0D;
private double maxY = 0.0D;
private double minY = 0.0D;
//建立多邊形 多邊形座標點
public PolygonAreaJudge(String axisStr) {
this.rate = RuleUtil.rate;
createPolygon(axisStr);
}
private boolean createPolygon(String axisStr) {
if (StringUtils.isEmpty(axisStr)) {
return false;
}
this.polygon = new Polygon();
String[] axisInfo = axisStr.split("\\;");
String currAxis = "";
for (int cnt = 0; cnt < axisInfo.length; cnt++) {
currAxis = axisInfo[cnt];
if (!StringUtils.isEmpty(currAxis)) {
int pos = currAxis.indexOf(",");
if (pos != -1) {
int y;
int x ;
try {
//十進位制轉換
DecimalFormat decimalFormat = new DecimalFormat("#########");
double dX = Double.parseDouble(axisInfo[cnt].substring(0, pos).trim()) * this.rate;
String sX = decimalFormat.format(dX);
if (sX.indexOf(".") != -1) {
sX = sX.substring(0, sX.indexOf("."));
}
x = Integer.parseInt(sX);
double dY = Double.parseDouble(axisInfo[cnt].substring(pos + 1, currAxis.length()).trim())
* this.rate;
String sY = decimalFormat.format(dY);
if (sY.indexOf(".") != -1) {
sY = sY.substring(0, sY.indexOf("."));
}
y = Integer.parseInt(sY);
} catch (NumberFormatException e) {
continue;
}
this.polygon.addPoint(x, y);
}
}
}
return true;
}
//建立邊界
private boolean creatBounds() {
Rectangle rectangle = this.polygon.getBounds();
this.maxX = rectangle.getMaxX();
this.maxY = rectangle.getMaxY();
this.minX = rectangle.getMinX();
this.minY = rectangle.getMinY();
return true;
}
public boolean checkIsInArea(int x, int y) {
if (this.polygon == null) {
return false;
}
return this.polygon.contains(x, y);
}
public boolean isInArea(float x, float y) {
int iX = (int) (x * this.rate);
int iY = (int) (y * this.rate);
return checkIsInArea(iX, iY);
}
public boolean isInArea(String x, String y) {
if (this.polygon == null) {
return false;
}
if (!isInAreaBounds(x, y)) {
return false;
}
int iX = RuleUtil.toInt(x);
int iY = RuleUtil.toInt(y);
return checkIsInArea(iX, iY);
}
public boolean isInAreaBounds(String x, String y) {
double ix = Double.parseDouble(x);
double iy = Double.parseDouble(y);
if ((ix >= this.minX) && (ix <= this.maxX) && (iy >= this.minY) && (iy <= this.maxY)) {
return true;
}
return false;
}
public static void main(String[] args) {
PolygonAreaJudge poly = new PolygonAreaJudge(
"118.126592,30.130026;118.213014,30.129031;118.2391,30.08164;118.170469,30.080835;118.112945,30.087563;118.102403,30.108645");
System.out.println("IsInArea is " + poly.isInArea(118.11251F, 30.115244F));
System.out.println("IsInArea is " + poly.isInArea("118.112511", "30.115244"));
System.out.println("IsInArea is " + poly.isInArea(118.12659F, 30.130026F));
poly = new PolygonAreaJudge("0,0;0,5;2,8;5,5;5,0");
System.out.println("IsInArea is " + poly.isInArea(2.0F, 3.0F));
}
}
RuleUtil輔助程式碼
RuleUtil.rate=1000000;
public static int toInt(String coordinate) {
double dx = Double.parseDouble(coordinate);
Double rdx = new Double(dx * rate);
long lx = rdx.longValue();
int ix = (int) lx;
return ix;
}
相關文章
- 如何判斷一個點在地圖上?如何判斷一個點在多邊形內?地圖
- JS 射線法 判斷點是否在多邊形內部JS斷點
- AutoCAD C# 判斷多邊形與點的位置關係C#
- 判斷當前瀏覽器是不是微信瀏覽器瀏覽器
- 視覺化學習:利用向量判斷多邊形邊界視覺化
- 判斷點是否在多邊形內的Python實現及小應用(射線法)斷點Python
- 百度地圖繪製多邊形區域地圖
- JS在瀏覽器中判斷當前網路狀態JS瀏覽器
- 如何判斷一個指定的位置點座標(GPS上的經緯度)是否落在一個多邊形區域內?
- JZ79 判斷是不是平衡二叉樹二叉樹
- 高德地圖多邊形圍欄例項:javaspringmvc+mysql地圖JavaSpringMVCMySql
- 在 Web 中判斷頁面是不是重新整理Web
- js 怎樣判斷使用者是否在瀏覽當前頁面JS
- JS判斷當前裝置是 PC IOS AndriodJSiOS
- 判斷Android 當前版本是否為debug版本Android
- vue透過自定義指令判斷當前元素是否在可視區域Vue
- 如何快速判斷是不是閉包
- Android判斷當前裝置是否設定了代理Android
- 判斷客戶端是iOS還是Android,判斷是不是在微信瀏覽器開啟客戶端iOSAndroid瀏覽器
- chinesecalendar:判斷日期是不是工作日
- JavaScript判斷當前裝置和瀏覽器型別JavaScript瀏覽器型別
- Python 實現任意多邊形的最大內切圓演算法_任意多邊形最大內切圓演算法Python演算法
- [Python手撕]判斷二分圖Python
- 判斷點是否在三角形內斷點
- 從txt中讀取邊,判斷圖的連通性
- 百度地圖電子圍欄判斷地圖
- canvas判斷點是否在路徑內Canvas斷點
- PbootCMS內容頁判斷有無多圖,無多圖顯示縮圖各種條件判斷和標籤boot
- nginx 多if判斷。Nginx
- php判斷變數是不是null的方法PHP變數Null
- 直播平臺軟體開發,判斷當前時間是否在規定時間內
- 如何判斷深度學習推理是不是真的跑在顯示卡上了深度學習
- SVG <polygon> 多邊形SVGGo
- opencv多邊形逼近OpenCV
- js呼叫百度地圖介面繪製任意多邊形並獲取每個點的經緯度等JS地圖
- 判斷難點
- Qt/C++地圖動態繪製折線多邊形矩形圓形標註點/可編輯拖動調整大小和位置QTC++地圖
- CAD繪圖工具中的正多邊形命令繪圖
- 如何用SPSS繪製頻率多邊形圖SPSS