亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

基于百度地圖的區(qū)域重疊判斷

OBKoro1 / 2574人閱讀

摘要:原文鏈接前些日的一個(gè)小需求用戶(hù)在后臺(tái)劃不規(guī)則區(qū)域,區(qū)域之間不能重疊,如圖判斷分兩步判斷多變形是否有相交線(xiàn)段,無(wú)則進(jìn)行第二步判斷公式判斷多變形之間是否存在頂點(diǎn)與多邊形的包含關(guān)系代碼如下點(diǎn)線(xiàn)面線(xiàn)段是否相交判斷兩多

原文鏈接: Fyerl"s Blog

前些日的一個(gè)小需求:
用戶(hù)在后臺(tái)劃不規(guī)則區(qū)域,區(qū)域之間不能重疊,如圖

判斷分兩步:
1、判斷多變形是否有相交線(xiàn)段,無(wú)則進(jìn)行第二步判斷(公式)
2、判斷多變形之間是否存在頂點(diǎn)與多邊形的包含關(guān)系(BMapLib.GeoUtils.isPointInPolygon)

代碼如下:

/**
 * 點(diǎn): { lat: xxx, lng: xxx }
 * 線(xiàn): [{ lat: xxx, lng: xxx }, { lat: xxx, lng: xxx }]
 * 面: [{ lat: xxx, lng: xxx }, { lat: xxx, lng: xxx }, { lat: xxx, lng: xxx }...]
 * */
const { BMap, BMapLib } = window;

/**
 * 線(xiàn)段是否相交
 * seg: [{ lat: xxx, lng: xxx }, { lat: xxx, lng: xxx }]
 * */
function isSegmentsIntersectant(segA, segB) {
  const abc = (segA[0].lat - segB[0].lat) * (segA[1].lng - segB[0].lng) - (segA[0].lng - segB[0].lng) * (segA[1].lat - segB[0].lat);
  const abd = (segA[0].lat - segB[1].lat) * (segA[1].lng - segB[1].lng) - (segA[0].lng - segB[1].lng) * (segA[1].lat - segB[1].lat);
  if (abc * abd >= 0) {
    return false;
  }

  const cda = (segB[0].lat - segA[0].lat) * (segB[1].lng - segA[0].lng) - (segB[0].lng - segA[0].lng) * (segB[1].lat - segA[0].lat);
  const cdb = cda + abc - abd;
  return !(cda * cdb >= 0);
}

/**
 * 判斷兩多邊形邊界是否相交
 */
function isPolygonsIntersectant(plyA, plyB) {
  for (let i = 0, il = plyA.length; i < il; i++) {
    for (let j = 0, jl = plyB.length; j < jl; j++) {
      const segA = [plyA[i], plyA[i === il - 1 ? 0 : i + 1]];
      const segB = [plyB[j], plyB[j === jl - 1 ? 0 : j + 1]];
      if (isSegmentsIntersectant(segA, segB)) {
        return true;
      }
    }
  }
  return false;
}

/**
 * 判斷兩多變形是否存在點(diǎn)與區(qū)域的包含關(guān)系(A的點(diǎn)在B的區(qū)域內(nèi)或B的點(diǎn)在A的區(qū)域內(nèi))
 */
function isPointInPolygonBidirectional(plyA, plyB) {
  const [pA, pB] = [[], []];
  plyA.forEach((item) => {
    pA.push(new BMap.Point(item.lng, item.lat));
  });

  plyB.forEach((item) => {
    pB.push(new BMap.Point(item.lng, item.lat));
  });


  let [a, b] = [false, false];
  a = pA.some(item => BMapLib.GeoUtils.isPointInPolygon(item, new BMap.Polygon(pB)));
  if (!a) {
    b = pB.some(item => BMapLib.GeoUtils.isPointInPolygon(item, new BMap.Polygon(pA)));
  }

  return a || b;
}


/**
 * 判斷多邊形是否重疊
 * */
export function isPolygonsOverlap(plyA, plyB) {
  return isPolygonsIntersectant(plyA, plyB) || isPointInPolygonBidirectional(plyA, plyB);
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92712.html

相關(guān)文章

  • 百度地圖開(kāi)發(fā)實(shí)例番外篇--實(shí)用方法(持續(xù)更新)

    摘要:一前言在使用百度地圖開(kāi)發(fā)的過(guò)程中,查閱百度地圖官網(wǎng)基本上就能滿(mǎn)足開(kāi)發(fā)的需求,但是有時(shí)候需要設(shè)置一些東西,很難在官網(wǎng)上查閱到相關(guān)的方法技巧。希望百度地圖能夠越來(lái)越強(qiáng)大,這樣開(kāi)發(fā)者就可以愉快的開(kāi)發(fā)了 一 前言 在使用百度地圖開(kāi)發(fā)的過(guò)程中,查閱百度地圖官網(wǎng)demo基本上就能滿(mǎn)足開(kāi)發(fā)的需求,但是有時(shí)候需要設(shè)置一些東西,很難在官網(wǎng)上查閱到相關(guān)的方法技巧。筆者特意把開(kāi)發(fā)過(guò)程中遇到的一些疑難雜癥和解...

    CocoaChina 評(píng)論0 收藏0
  • 百度地圖判斷多邊形區(qū)域是否重復(fù)

    摘要:原文來(lái)自前端時(shí)間遇到個(gè)問(wèn)題,就是判斷百度地圖里的多個(gè)任意多邊形區(qū)域是否重復(fù),在網(wǎng)上看了很多的文章都沒(méi)有找到解決方案,功夫不負(fù)有心人,在網(wǎng)上找到個(gè)可以判斷是否重復(fù)的,但是在包含的情況下就不能判斷,后來(lái)自己加入根據(jù)點(diǎn)判斷點(diǎn)是否在多邊形內(nèi)來(lái)判斷重 原文來(lái)自 taoeer.top 前端時(shí)間遇到個(gè)問(wèn)題,就是判斷百度地圖里的多個(gè)任意多邊形區(qū)域是否重復(fù),在網(wǎng)上看了很多的文章都沒(méi)有找到解決方案,功夫不...

    Charles 評(píng)論0 收藏0
  • 百度地圖判斷多邊形區(qū)域是否重復(fù)

    摘要:原文來(lái)自前端時(shí)間遇到個(gè)問(wèn)題,就是判斷百度地圖里的多個(gè)任意多邊形區(qū)域是否重復(fù),在網(wǎng)上看了很多的文章都沒(méi)有找到解決方案,功夫不負(fù)有心人,在網(wǎng)上找到個(gè)可以判斷是否重復(fù)的,但是在包含的情況下就不能判斷,后來(lái)自己加入根據(jù)點(diǎn)判斷點(diǎn)是否在多邊形內(nèi)來(lái)判斷重 原文來(lái)自 taoeer.top 前端時(shí)間遇到個(gè)問(wèn)題,就是判斷百度地圖里的多個(gè)任意多邊形區(qū)域是否重復(fù),在網(wǎng)上看了很多的文章都沒(méi)有找到解決方案,功夫不...

    gself 評(píng)論0 收藏0
  • 計(jì)算機(jī)視覺(jué)識(shí)別簡(jiǎn)史:從 AlexNet、ResNet 到 Mask RCNN

    摘要:最近,物體識(shí)別已經(jīng)成為計(jì)算機(jī)視覺(jué)和最令人激動(dòng)的領(lǐng)域之一。故事開(kāi)始于年贏得了大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)賽。感受野特征的輸入?yún)^(qū)輸入圖像區(qū)會(huì)影響特征的激活。的架構(gòu)決定了感受野是如何隨著層數(shù)的改變而改變的。這些被推出區(qū)域被裁剪并扭曲到固定大小的圖像。 最近,物體識(shí)別已經(jīng)成為計(jì)算機(jī)視覺(jué)和 AI 最令人激動(dòng)的領(lǐng)域之一。即時(shí)地識(shí)別出場(chǎng)景中所有的物體的能力似乎已經(jīng)不再是秘密。隨著卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)的發(fā)展,以及大型訓(xùn)練...

    BigTomato 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<