{"id":13745,"date":"2023-07-04T12:15:38","date_gmt":"2023-07-04T03:15:38","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=13745"},"modified":"2023-07-04T12:33:16","modified_gmt":"2023-07-04T03:33:16","slug":"fingereyes-xr%ea%b3%bc-jsts-%ea%b0%99%ec%9d%b4-%ec%93%b0%eb%8a%94-%ec%bd%94%eb%93%9c","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=13745","title":{"rendered":"FingerEyes-Xr\uc5d0\uc11c JSTS\ub97c \uc0ac\uc6a9\ud55c \uc4f0\ub294 \ucf54\ub4dc \uc815\ub9ac"},"content":{"rendered":"<p>FingerEyes-Xr\uc740 JS \uae30\ubc18\uc758 \ub9f5\uc5d4\uc9c4\uc774\uace0 JSTS\ub294 JS \uae30\ubc18\uc758 \uc9c0\uc624\uba54\ud2b8\ub9ac \uc5f0\uc0b0 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uacf5\uac04 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ucc98\ub9ac\ub97c \uc218\ud589\ud558\ub294 \uacbd\uc6b0\uc5d0 JSTS\ub97c \uc0ac\uc6a9\ud558\uba74 \ub9e4\uc6b0 \uc88b\uc740\ub370\uc694. \uc624\ub798\uc804\ubd80\ud130 1.9\ubc84\uc804\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc5c8\ub294\ub370 \uc624\ub298 \ubcf4\ub2c8 JSTS\uac00 2.9.3 \ubc84\uc804\uae4c\uc9c0 \uc62c\ub77c\uc654\uad70\uc694.<\/p>\n<p>JSTS\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub9cc\uc744 \ubf51\uc544 \uc815\ub9ac\ud558\uae30\uac00 \ubc84\uaca8\uc6cc&#8230;. \ub300\ucda9 \uc5b8\uae09\ud558\uc5ec \uc815\ub9ac\ud574 \ubd05\ub2c8\ub2e4. \uc544\ub798 \ucf54\ub4dc\uc758 \ubaa9\uc801\uc740 \uc911\ucca9\ub418\ub294 \uacf5\uac04 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ud5e5\uc0ac\uace4 \ub3c4\ud615\uc744 \uc0dd\uc131\ud574 \uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n#run() {\r\n  const selectLayers = this.#dialog.content.querySelector(\".input-layer\")\r\n  const radius = parseFloat(this.#dialog.content.querySelector(\".radius\").value)\r\n  const layerName = selectLayers.value\r\n  const layer = app.map.layers().layer(layerName)\r\n  const mbrLayer = layer.MBR()\r\n\r\n  \/\/ MBR\uc758 \uc88c\ud45c\uacc4\ub97c \ubc30\uacbd\uc9c0\ub3c4\uc5d0 \ub300\ud55c \uc88c\ud45c\uacc4\ub85c \ubcc0\uacbd\ud568\r\n  const proj = layer.EPSG() === -1 ? null : proj4(layer.proj4Name(), 'EPSG:' + layer.EPSG());\r\n  const [minX, minY] = proj ? proj.forward([mbrLayer.minX, mbrLayer.minY]) : [mbrLayer.minX, mbrLayer.minY];\r\n  let [maxX, maxY] = proj ? proj.forward([mbrLayer.maxX, mbrLayer.maxY]) : [mbrLayer.maxX, mbrLayer.maxY];\r\n  maxX += radius*2\r\n  maxY += radius*2\r\n\r\n  const xStep = radius + radius\/2\r\n  const yStep = radius * Math.sin(60*(Math.PI\/180)) * 2\r\n  const gl = new Xr.layers.GraphicLayer(\"gl\")\r\n  app.map.layers().add(gl)\r\n\r\n  const cntRows = layer.totalRowsCount();\r\n  const wktReader = new jsts.io.WKTReader()\r\n\r\n  for(let y=minY; y&lt;maxY; y+=yStep) {\r\n    for(let cx=minX; cx&lt;maxX; cx+=xStep) {  \r\n      ...\r\n      const pts = [[ \/* Hexagon \ub3c4\ud615 \uad6c\uc131 \uc88c\ud45c \ub9cc\ub4dc\ub294 \ucf54\ub4dc *\/ ]]\r\n\r\n      const psd = new Xr.data.PolygonShapeData(pts)\r\n      const pgr = new Xr.data.PolygonGraphicRow(count, psd)\r\n\r\n      const geomHexa = wktReader.read(psd.toWKT(false))   \r\n      let intersected = false\r\n      for(let i=0; i&lt;cntRows; i++) {\r\n        const shapeRow = layer.getShapeByFID(i)\r\n        const geom = wktReader.read(shapeRow.shapeData().toWKT(true))   \r\n        if(geom.intersects(geomHexa)) {\r\n          intersected = true\r\n          break\r\n        }\r\n      }\r\n  \r\n      if(intersected) gl.rowSet().add(pgr)\r\n    }\r\n  }\r\n\r\n  app.map.update()\r\n}\r\n<\/pre>\n<p>JSTS\uc5d0 \ub300\ud55c \uc8fc\uc694 \ucf54\ub4dc\ub294 21\ubc88, 31\/35\ubc88, 36\ubc88\uc778\ub370\uc694. \uac01\uac01 jsts.io.WKTReader \uac1d\uccb4 \uc900\ube44, WKT\ub85c\ubd80\ud130 JSTS\ub97c \uc704\ud55c \uc9c0\uc624\uba54\ud2b8\ub9ac \uac1d\uccb4\ub97c \uc0dd\uc131, \uc911\ucca9 \uc5ec\ubd80 \ud655\uc778 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \ucc38\uace0\ub85c \uc704\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \ub9cc\ub4e4\uc5b4 \ub0c5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2023\/07\/Untitled-1-copy.jpg\" alt=\"\" width=\"1920\" height=\"1080\" class=\"alignnone size-full wp-image-13752\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FingerEyes-Xr\uc740 JS \uae30\ubc18\uc758 \ub9f5\uc5d4\uc9c4\uc774\uace0 JSTS\ub294 JS \uae30\ubc18\uc758 \uc9c0\uc624\uba54\ud2b8\ub9ac \uc5f0\uc0b0 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. \uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uacf5\uac04 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ucc98\ub9ac\ub97c \uc218\ud589\ud558\ub294 \uacbd\uc6b0\uc5d0 JSTS\ub97c \uc0ac\uc6a9\ud558\uba74 \ub9e4\uc6b0 \uc88b\uc740\ub370\uc694. \uc624\ub798\uc804\ubd80\ud130 1.9\ubc84\uc804\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc5c8\ub294\ub370 \uc624\ub298 \ubcf4\ub2c8 JSTS\uac00 2.9.3 \ubc84\uc804\uae4c\uc9c0 \uc62c\ub77c\uc654\uad70\uc694. JSTS\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub9cc\uc744 \ubf51\uc544 \uc815\ub9ac\ud558\uae30\uac00 \ubc84\uaca8\uc6cc&#8230;. \ub300\ucda9 \uc5b8\uae09\ud558\uc5ec \uc815\ub9ac\ud574 \ubd05\ub2c8\ub2e4. \uc544\ub798 \ucf54\ub4dc\uc758 \ubaa9\uc801\uc740 \uc911\ucca9\ub418\ub294 \uacf5\uac04 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ud5e5\uc0ac\uace4 \ub3c4\ud615\uc744 \uc0dd\uc131\ud574 \uc8fc\ub294 \uac83\uc785\ub2c8\ub2e4. #run() { &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=13745\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;FingerEyes-Xr\uc5d0\uc11c JSTS\ub97c \uc0ac\uc6a9\ud55c \uc4f0\ub294 \ucf54\ub4dc \uc815\ub9ac&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-13745","post","type-post","status-publish","format-standard","hentry","category-fingereyes-xr"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/13745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13745"}],"version-history":[{"count":14,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/13745\/revisions"}],"predecessor-version":[{"id":13762,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/13745\/revisions\/13762"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13745"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}