30. 2024.06.16(일) 수정사항. 어떤 좌표로 작도된 도면을 다른 좌표계로 변환해야 할 경우가 있다. bessel1841 좌표계 도면을 wgs84로 변환해야 할 경우, 반대로 wgs84 좌표계 도면을 bessel1841로 변환할 경우이다.
① 예를 들면, 화성동탄 계획평면도는 bessel1841(舊좌표) 중부원점으로 그려진 도면이다. 이 도면을 wgs84(新좌표)로 변환할 필요가 있을때, 엑셀 화면의 다음 버튼을 클릭하면, bessel좌표를 wgs좌표로 계산한 뒤, 같은 도면내에서 계산된 좌표로 객체를 이동한다.
편집하고자 하는 도면의 좌표계를 필히 확인하여야 한다. 변환하고자 하는 좌표계와 다른 버턴을 클릭하면 실행을 중지하게 했다.
② e.g. 붉은 색 네모 안의 객체를 wgs84 좌표계로 변환하여 이동시키는 경우,
나. 선택한 객체들의 좌표는 신좌표로 계산되어 이동하게 된다.
다. 이동한 객체들은 wgs 좌표계이므로, 엑셀화면에서, wgs 좌표계 + 가산값 600,000을 선택하여 카카오 지도를 실행하면,
라. 카카오지도로 확인하였을때, 좌표이동이 된 것을 알 수 있다.
③ 좌표이동은 모든 종류의 객체들이 되는 것은 아니고, 자주 쓰이는 종류만 추가했다.
아크, 블록, 원, 타원, 선, MTEXT, 점, lw폴리선, 2D폴리선, 3D폴리선, 문자, 지시선, 해치, spline, 솔리드, 래스터 이미지, 기타 몇개는 된다.
각 개체의 좌표, 중심점, 시종점 등을 계산하여 캐드 Object 속성을 업데이트 하기 때문에 이동시키는 것은 어렵지 않으나, 객체의 종류가 너무 많다. 이동이 되지 않는 객체는 coding이 되지 않았다.
가) 특히, 해치(hatch)의 경우, 캐드에서는 따로 속성값을 안 주는 것 같다. 오토캐드 Guide를 읽어 봤는데, 해치를 만드는 Method만 있고, Property는 안 준다. 그래서, GetBoundingBox minExt, maxExt를 이용해, 해치의 바운더리 중심점을 구해 이동시켰다. 그 외 솔리드, 래스터 이미지 등 몇 종류 object도 이렇게 해도 되는지, 분명히 다른 방법이 있을텐데, 미봉책으로 이렇게 한다.
나) 좌표계와 좌표변환에 의한 오차
- 지구 타원체에 대한 bessel1841과 grs80의 기준값이 다르므로 수학적인 좌표변환은 여러 의미에서 불가능하다. 「국가좌표변환계수 고시 」 계산식에 의해 근사적으로 구할 수 밖에 없다.
또한 지구는 수학적인 타원체가 아닌, 울퉁불퉁한 덩어리이고, 각 지역에서 진북, 중력가속도가 다르며, 지구에는 수학적인 중심점이 없다.
- 현실에서의 100m에 대한 측량값을 각 기준계(bessel1841, grs80)에 따라 작도하고 변환하면, 100m가 아니라 100m±α 값이 된다. 이는 지구타원체에 대한 기준계가 다르므로 나타나는 결과이다.
- 그러므로, bessel로 작도된 도면을 grs80으로 변환하면 길이가 달라진다. 반대의 경우도 같다. 좌표변환된 도면을, beseel ↔ wgs 상호간 변환후 다시 원래의 좌표로 변환한다면 「국가좌표변환계수 고시 」의 계산식에 의해 7mm 정도의 이동 오차도 발생한다.
- 첨부 엑셀파일의 변환 macro를 사용한다면, 점, 선 등은 각 포인트를 좌표변환하여 이동한다. hatch, 솔리드등과 같은 객체는 cad에서 따로 각 포인트 별 좌표점을 주지 않는 것 같다. 할 수 없이 GetBoundingBox 등을 이용한 이동점을 기준으로 단순 이동한다. 이렇게 하면, 라인, 폴리선과 같이 각 포인트를 좌표변환 이동한 경우와 끝점에서, 예를 들어 약 0.04mm의 오차가 발생한다. 항목30.의 설명 종료.
블로거 본문 시작 :
1. 개요 : 캐드 도면의 선 等을 클릭하고 Enter치면 인터넷의 카카오맵이 자동으로 실행되면서 캐드 도면의 선 等을 카카오맵에 나타낸다.
AutoCad로 작성된 도면에서 엑셀 VBA를 이용하여 객체의 좌표값을 계산하고, 카카오맵(HTML 파일), 구글어스(KML 파일), [환경부] (환경공간정보서비스) 생태자연도(js파일)로 표현한다. ※ 엑셀파일 等 첨부. 아래 8. 첨부파일에서 다운로드 링크 클릭하세요.
① VB는 엑셀에서 작성하였으며, 엑셀화면에서 컨트롤버튼을 클릭하면(2020.08.16 수정)
② 오토캐드 화면으로 전환되며, 이 도면에서 지도에 나타낼 폴리선, 선, 원 等 객체를 선택한다.
③ 카카오지도 버튼을 클릭하였다면, 아래 카카오지도가 실행되면서 선택한 객체들이 카카오지도의 화면에 나타난다.
④ 구글어스 버튼을 클릭하였다면, 아래 구글어스가 실행되면서 선택한 객체들이 구글어스의 화면에 나타난다.
2. 목적 : 정위치 편집된 위치도, 전체평면도 등 캐드도면으로만 봤을 때는 지형지물을 직관적으로 알기 어렵다. 엑셀VBA와 캐드를 연동하여, 캐드도면상의 객체를 클릭하면 엑셀에서 HTML파일 또는 KML파일을 생성하여 자동 실행한다. 지도를 확대하거나 축소하여도 좌표로 입력된 객체는 변하지 않으므로 지도에서 쉽게 알아 볼 수 있다.
3. 설정 : 각 컴퓨터 환경과 프로그램(엑셀, 캐드) 버전이 달라 실행시 따로 설정해주어야 한다.
① 엑셀파일의 경우 VBA를 사용해야 하므로, 엑셀파일 Open시 「보안 경고」 옵션에서 "이 콘텐츠 사용(E)"을 체크해 주어야 한다.
또는
② 엑셀파일 Open후 캐드와 연동하기 위하여 참조를 등록하여야 한다. Alt키+F11키를 동시에 눌러 VB창을 띄운 다음 도구(T)메뉴-참조(R) VBA project에서 그림과 같이, 예를 들어 cad 버전 2007을 이용한다면, AutoCAD 2007 Type Library에 체크해야 한다. 최초 1회만 하면 등록된다.
4. 방법 : 카카오맵이나 구글어스 모두 컨트롤버튼을 눌러 실행시킨다.
① 엑셀파일과 캐드파일이 동시에 열려 있어야 엑셀 ↔ 캐드간 화면전환이 가능하다. 캐드파일이 열려 있지 않다면, 다음과 같은 메시지박스가 나타나고 실행은 중지된다.
② 엑셀파일에서, '4. 선택회수 等'에서 선 종류(선, 문자, 클릭이벤트 포함 등 선택), 선색(색상지정 또는 캐드의 선색 그대로), 선두께 등 값을 클릭(설정)하고 실행버튼을 누르면 캐드 화면으로 전환되며, 각 그룹별로 지정한 객체 종류대로, 처음 객체들을 선택한 다음 Enter, 다음 객체들을 선택한 다음 Enter, 또 다음 객체들을 선택한 다음 Enter치면 카카오맵 또는 구글어스가 실행된다. Ⅰ,Ⅱ,Ⅲ 그룹을 모두 선택하면 Enter를 3번 쳐야 하고, Ⅱ,Ⅲ 그룹을 '선택안함'으로 설정하면 Enter를 1번만 입력하면 지도가 실행된다.
③ 컨트롤 버튼을 눌렀는데도 엑셀에서 캐드화면으로 전환되지 않을때는 작업표시줄에서 직접 캐드 탭을 선택하여 화면을 전환한다.
④ 카카오맵의 경우, 인터넷 익스플로러를 쓴다면 매번 실행시 마다 아래와 같이 스크립트 실행 경고가 뜨므로, 도구-인터넷옵션-고급-보안의 [내 컴퓨터]에 있는 파일에서 액티브 콘텐츠가 실행되는 것을 허용에 체크하면 다음부터는 나타나지 않는다.
5. 좌표 : 측지계는 지역측지계와 세계측지계를 선택하게 하였다.
① 도면은 좌표대로 작성되어야만 올바로 표현되고 그렇지 않다면 엉뚱한 곳에 표시될 것이다. 도면이 좌표대로 작성되었는데도 다르게 표시된다면, 측지계를 변경하여 실행해 본다.
② 종평면도와 같이 회전, 이동되어 좌표가 틀리다면 정위치로 편집하여 실행해야 한다.
③ (지역, 세계)TM좌표 → (지역, 세계)경위도 좌표로 변환하므로, 기준도면의 좌표계 원점을 확인해야 한다. 대부분 중부원점 아니면 동부원점이다.
6. 설정사항 : 카카오맵, 구글어스 실행시 문제점들
① PC에서 직접실행하기 위해 실행파일은 '20210127_kakaomap_Google earth_생태자연도.htm 또는 20210127_kakaomap_Google earth_생태자연도.kml'로 저장하여 직접 실행되게 된다. kml파일은 구글어스 파일이므로 PC나 스마트폰에 당연히 구글어스 또는 구글어스앱이 깔려 있어야 한다.
만약, 실행파일 저장위치는 편의상 C:\temp으로 지정했으며, PC C:\에 temp폴더가 없다면 'C:\temp' 폴더를 만들어야 저장할 수 있다.
엑셀 매크로를 실행시 마다 위 파일에 덮어 쉬우기 하므로, 따로 필요하다면 파일이름을 다른이름으로 변경한 후 매크로를 실행해야 한다.
②카카오맵에서 'point(지번주소)'는 카카오지도 API키를 통해서 주소를 읽어 오는데, 다음카카오의 정책으로 웹서버에서 실행해야 한다.
③ kml파일 실행시 한글이 깨지는 현상은 ANSI코드로 되어 있어, 20210127_kakaomap_Google earth_생태자연도.kml을 메모장에서 열어 인코딩을 UTF-8로 선택후 다시 저장하여 실행하면 한글이 바로 보인다.
④ kml파일은 스마트폰에서도 바로 실행되나, google의 정책으로 한국에서는 구글어스앱 실행이 안되게 막아 놓았다. 아래처럼 스마트폰에서 KML파일을 열려면, google 외국 계정으로 구글어스앱을 설치해야 한다. 아래 화면은 google에서 막기전에 실행한 화면이다.
⑤ HTML 파일을 스마트폰에서 실행시킬때, 일반적으로는 문제가 없지만, 위치추적(GPS, wifi)기능을 사용하려면 스마트폰 브라우져에서 실행해야 한다.
엑셀화면에서 "E9" 셀에 '위치추적기 아이콘(마크만)' 또는 '위치추적기 아이콘 좌표TM'을 선택하고, 실행하면,
캐드화면으로 전환되고, 지도에 나타날 객체를 선택하고, 카카오지도가 실행되면 다음과 같이 '내 위치'를 표시할 것인지를 묻는다. '허용'을 클릭하면, 현재위치에 "위치표시(십자선) 아이콘"이 나타난다.
현재 위치를 표현하는 아이콘(ICON)은 임의로 제수변 마크 위치표시(십자선) 아이콘(변경 : 20230122)의 src 주소를 불러 왔다. image이므로 다른 그림을 src로 연결해도 된다. 제수변 마크 위치표시(십자선) 아이콘이 표시되는 위치는 컴퓨터의 대략적인 IP 접속위치이다.
20190815_kakaomap_Google earth_생태자연도.htm으로 생성된 htm파일을 스마트폰에 붙여 넣어, "내 파일 → 내장 메모리 → Download → 20190815_kakaomap_Google earth_생태자연도.htm"을 실행시키면,
와 같이 나타나며, 「위치 추적」 여부는 안 물어보고, HTML코드만 실행한다. 이유는 google에서 보안때문에 막아 놓았다. https:// 환경에서만 위치 정보를 받아 갈 수 있게 해 놓았다. 개인의 위치 정보는 중요한 사항이니 보안환경에서만 나타내게 했다. google의 보안정책이다.
웹브라우저 창에 "file:///sdcard/download를 입력하면, 아래와 같이 탐색기가 실행되고,
KakaoMap, google earth, Vworld 등, 지도 자체가 측량값이 아닌 사진이므로 오차가 대략 ±5m정도 나고, 스마트폰의 GPS기능은 몇 십미터씩 왔다갔다 하고, 캐드 도면상의 선형이 좌표와 틀릴 수 있어, KakaoMap에서 나타나는 위치 표시는 정확하지 않다.
※ 카카오지도에서 위치추적기와 TM좌표를 같이 표현. (20230122 현재위치 표시는 '제수변마크크'가 아닌 '위치표시(십자선) 아이콘'으로 변경함.)
⑥ 카카오지도에서 클릭이벤트는 PC에서 마우스로 클릭시, 스마트폰에서 손가락 터치시 인포윈도가 팝업되면서, 캐드에서 읽어 온 레이어명과 각 객체의 길이, 면적등의 간단한 속성값을 표현한다. 편집할게 아니라면 보통은 없는 게 낫다. 편집할려면 약간의 javascript에 대한 이해가 필요하다.
PC에서 클릭 시
스마트폰에서는 손가락이 너무 커서, 클릭 할때 신경 써야 함.
7. 사례 : 첨부파일을 다운 받아 더블클릭하면 지도가 실행된다.
① 카카오맵 : 20210127_kakaomap_Google earth_생태자연도.htm
② 구글어스 : 20210127_kakaomap_Google earth_생태자연도.kml
③ 20200412_스마트폰 GRS80_TM좌표 간이측량.htm
PC에서는 당연히 기지국 GPS 좌표가 나타나고, 스마트폰에서는 file:///~ 에서 직접 실행해야 GPS 위치 정보가 나타난다. content//0@media/external/~에서 실행시키면 google의 보안정책에 의해 GPS 위치정보가 차단되어 현재 스마트폰의 위치는 나타나지 않는다.
④ 20200412_스마트폰 Bessel1841_TM좌표 간이측량.htm
8. 첨부파일
①
② 20210127_kakaomap_Google earth_생태자연도.htm ← 샘플파일 다운로드 할려면 링크 클릭
③ 20210127_kakaomap_Google earth_생태자연도.kml ← 샘플파일 다운로드 할려면 링크 클릭
④ 로컬호스트 관련 파일
index.html ← 다운로드 할려면 링크 클릭
index.js ← 다운로드 할려면 링크 클릭
package.json ← 다운로드 할려면 링크 클릭
⑤ 20200412_스마트폰 GRS80_TM좌표 간이측량.htm ← 다운로드 할려면 링크 클릭
⑥ 20200412_스마트폰 Bessel1841_TM좌표 간이측량.htm ← 다운로드 할려면 링크 클릭
⑦ 20201128 CAD 포인트좌표를 kakaomap에 주소로 표시.htm ← 다운로드 할려면 링크 클릭
⑧20210127_kakaomap_Google earth_생태자연도.xlsm ← 삭제, 8-⑨을 다운로드 하세요.
⑨ 20240329 Autocad용 kamap_Gmap_생태자연도.xlsm ← 다운로드 할려면 링크 클릭
⑧
⑨ 20240329 Autocad용 kamap_Gmap_생태자연도.xlsm ← 다운로드 할려면 링크 클릭
9. [환경부] (환경공간정보서비스) 생태자연도 추가(2019.07.05 수정)
① 엑셀 화면에서 「생태자연도」 버튼 클릭하면 캐드화면으로 전환되고, 현재는 폴리라인만 선택 가능하며, 폴리라인의 개수는 제한이 없습니다. 엑셀시트 C14셀(선 색)과 C15셀(선 두께) 값을 가져오므로, 선 색과 선 두께를 잘 조절해야 합니다.
② 생태자연도는 직관적으로 어느 지역인지 알기가 어려우므로, 특히 캐드도면의 좌표계를 확인해야 하며, 투영원점과 가산값을 주의 깊게 봐야한다.
③ 환경공간서비스의 생태자연도 API는 openlayers를 기반으로 한다고 합니다. 그래서 로컬호스트에서 실행해야 하고, 웹브라우저 창에서는(더블 클릭) 실행이 안됩니다. npm과 parcel 프로그램 둘 다 설치하여 로컬호스트에서 실행해야 합니다.
④ 로컬호스트 실행을 위해서는,
가. https://nodejs.org/en/에 가서 node-v10.16.0-x86.msi 다운 받아 설치해야 하고,
나. https://openlayers.org/en/latest/doc/tutorials/bundle.html 에 가서 설치해야 하고, (npm install ol, npm install --save-dev parcel-bundler)
다. https://parceljs.org/getting_started.html 도 설치하고,
라. c:드라이브의 임의의 곳에 폴더를 만들고("C:\Users\user\new-project", 파일을(index.html, index.js, package.json) 복사하여 넣어야 합니다.
마. 도스 명령창에서 c:\users\user\new-project\npm start 입력하고 엔터치면 약 30초 내외에서 로컬서버가 실행됩니다.
바. 엑셀에서 실행시키면 "C:\Users\user\new-project\index.js"을 덮어 쓰고, 변화가 있으면 로컬서버에서 자동으로 반영됩니다.
10. 엑셀화면의 하단의 「기타 실행버튼」의 '컨트롤 서식'들은,
① 캐드 도면에서 '중심선에 일정 폭을 가지는 평행한 폴리라인을 그리는 코드'
컨드롤 서식을 클릭하면 CAD 화면으로 전환되고, CAD 화면에서 선택한 폴리선들에서
InputBox로 입력 받은 폭만큼 떨어져 평행한 폴리선들을 그린다.
② 캐드 도면의 각 객체들의 좌표와 값을 가져오는 코드들
③ 엑셀 화면에서 캐드로 각 객체들을 그리는 코드들
④ 좌표계 간 변환 코드
(Bessel1841 TM좌표 ↔ WGS84 TM좌표로 변환, 경위도좌표(GCS) ↔ 평면직각좌표(TM) 코드들의, 개별 프러시져들임.
① 캐드 도면에서 '중심선에 일정 폭을 가지는 평행한 폴리라인을 그리는 코드'
컨드롤 서식을 클릭하면 CAD 화면으로 전환되고, CAD 화면에서 선택한 폴리선들에서
InputBox로 입력 받은 폭만큼 떨어져 평행한 폴리선들을 그린다.
② 캐드 도면의 각 객체들의 좌표와 값을 가져오는 코드들
③ 엑셀 화면에서 캐드로 각 객체들을 그리는 코드들
④ 좌표계 간 변환 코드
(Bessel1841 TM좌표 ↔ WGS84 TM좌표로 변환, 경위도좌표(GCS) ↔ 평면직각좌표(TM) 코드들의, 개별 프러시져들임.
11. [요청사항] ACAD 도면의 POINT를 선택시 포인트의 좌표에 해당하는 주소를 카카오지도에 표시하는 코드 추가하였습니다(20201128 수정).
① 엑셀 화면에서 「선 종류」에 추가 하였습니다. 기존 Point는 도면상의 Point 그대로이고, Point(지번주소)는 도면상의 Point 좌표에 해당하는 주소를 카카오지도에서 읽어 와서, 인포윈도우로 카카오지도에 나타내 줍니다. 포인트는 크기가 반지름이 1m인 작은 원으로 표현하였습니다.
③ 카카오지도를 실행하면 너무 좁아서 인포윈도우가 겹쳐서 보입니다. 주소가 긴 경우에는 칸이 넘어가서 인포윈도우를 넘어 표시되어, 조금 보시기 불편할 수 있습니다. 카카오지도에서 최대로 확대(Level 1)해도 다음과 같이 보입니다. 파란색 선은 지적선입니다. 당연히 polyline을 선택해서 실행해야 합니다.
12. [요청사항] ACAD 도면의 색상을 그대로 카카오맵 또는 구글어스에 표현함. 먼저 객체의 색상을 우선하고, 객체의 색상이 별도로 지정되어 있지 않고, ByLayer로 되어 있을때는 레이어의 색상으로 표현합니다. 선 두께는 ACAD상의 두께와는 상관없이 엑셀 쉬트 D14셀의 값으로 합니다.
13. [변경사항] 2021.03.22 변경사항
ⓘ 카카오지도의 API 키 관련 변경 공지사항이 있습니다.
아래는 제 API 키입니다. 그 전에는 아무 거나 해서, Admin 키를 넣었는데, 이제는 JavaScript 키를 쓰라고 하네요. 보안때문에 Admin 키를 넣으면 안된다고 합니다.
HTML 파일 15번째 줄에서,
<script type="text/javascript" src="http://dapi.kakao.com/v2/maps/sdk.js?appkey=abe85ab7일부번호 삭제513299580&libraries=services"></script> 이 것을,
<script type="text/javascript" src="http://dapi.kakao.com/v2/maps/sdk.js?appkey=c2d2fc7d6d8839952c6357aaf0dfc299&libraries=services"></script> 이렇게 바꾸고, 저장 후 실행하면 됩니다.
③ 블로거에 링크된 엑셀파일에도 API 키를 바꿔 놓았으니, 새로 다운 받으시면 됩니다. 또한 다음카카오의 정책이 언제 또 바뀔지 모르니, API 키는 다음카카오에 가입하여, API 키를 발급 받으셔서 본인 API 키를 쓰셔도 됩니다. 본인 API키를 쓰실려면, 엑셀 VBA 편집창에서,
ActiveCell.Cells(15, 1).Value = "<script type=" & """" & "text/javascript" & """" & " src=" & """" & "http://dapi.kakao.com/v2/maps/sdk.js?appkey=abe85ab7일부번호 삭제513299580&libraries=services" & """" & "></script>" 이 코드를 찾아, (ctrl+F 찾기해서)
ActiveCell.Cells(15, 1).Value = "<script type=" & """" & "text/javascript" & """" & " src=" & """" & "http://dapi.kakao.com/v2/maps/sdk.js?appkey=c2d2fc7d6d8839952c6357aaf0dfc299&libraries=services" & """" & "></script>" 이렇게 바꾸면 앞으로 실행할 때 마다 변경된 키가 입력됩니다.
게다가 웹서버를 통하게 되어 한글 인코딩도 UTF-8로 바꾸어야 합니다. 할 수 없이 메모장에서 HTML 문서를 열어서, 다른이름으로 저장에서 인코딩을 ANSI에서 UTF-8으로 바꾸어 다시 저장해야 합니다.
검색창에 "웹서버 크롬"으로 검색하면 "Web Server for Chrome"이란 앱이 나오고,
앱을 실행하면,
폴더는 아무 폴더나 지정해면 되는데, 저는 편의상 "C:\Temp"로 정했습니다. 한 번만 지정하면 바꾸기 전까지 매번 기억되네요.
만약 웹서버를 종료하고 클릭하면 '사이트에 연결할 수 없음'이라고 나옵니다.

② 실행화면 : 경상북도 영양군 영양읍 지적편집도. 경상북도는 동부원점인데, 연속지적도는 중부원점입니다. 카카오지도의 지적편집도는 연속지적도와 일치하나, 카카오지도의 항공지도와 연속지적도가 어긋나 있습니다. 원인이 무얼까 궁금합니다.

③ 엑셀화면 : 「9. 지도type 선택」을 추가하여 지적편집도 보기와 안보기를 설정하였습니다.

④ 카카오맵 지도Type 선택버튼을 넣느라 공간이 없어, 모니터 세로화면은 100%에서 90% 줄이고, 남는 공간에 선택버튼을 넣었습니다. 지도 타입을 안 보고 싶으시면, 「지도타입 안보기」를 클릭하세요. 고친 엑셀파일은 블로거 본문에서 링크로 다시 다운 받으세요.
17. [변경사항] 카카오맵 로드뷰 추가
가. Polyline 선상에 있는 텍스트를 카카오지도에 나탸내기 위해서는 텍스트는 폴리라인의 선상에 있어야 합니다. 폴리라인의 각 성분 중 두 점을 잇는 선분 사이에 텍스트가 위치해야 합니다. 폴리라인의 좌표점에 위치하면 내적이 0이므로 양수가 안 되어 인식이 되지 않습니다.
② 카카오지도에서 폴리곤을 클릭하였을때 인포윈도우에 문자를 나타내는 사례입니다.
캐드에서 폴리라인을 선택해도 카카오지도에서는 다각형의 폴리곤으로 구분하였습니다. 폴리곤내에 포함된 텍스트의 구분은 직선과 직선의 교점의 개수를 구하는 기하학의 방정식으로 판단할 수 있습니다.
나. 만약 폴리선으로 그렸다면, 카카오지도에서 선종류는 폴리라인을 선택하고, 선 두께는 가장 가는 선 1로 선택한다. 카카오지도에서는 레벨 1에서 1pixel이 0.25m이므로 200m는 800픽셀이며, 캡쳐 프로그램의 크기를 800픽셀×800픽셀로 고정 후, 선 두께 1로 그린 사각형을 캡쳐하면, 사진은 200m×200m인 정사각형이 된다. 최대 확대값은 레벨 0이므로 1pixel이 0.125m이다.
20. 2022.09.14(수) 수정사항. '마우스 클릭' 대신 '마우스 오버, 아웃'으로 대체
만들어진 카카오지도에서는, VBA 'polyline(속성클릭)'을 통해 만든 폴리라인의 속성을 확인하기 위해, 카카오맵의 선을 클릭하여 확인하였으나, 폴리라인의 위치를 확인해야 할 필요로 클릭하기에 너무 시간이 많이 걸리고 구분이 안되어, 마우스를 카카오맵의 폴리선 위에 올리면 속성정보가 나타나고, 마우스를 카카오맵의 폴리선에서 벗어 나면 원래 폴리선의 색상으로 돌아 오게 하는 "Sub K13_카카오맵_폴리라인마우스오버아웃()" 프러시져를 추가하였습니다. 주의 : 모니터 화면상의 폴리라인에 마우스를 갖다 대므로 마우스 위치를 정확히 놓기 어려움. 마우스 오버, 아웃이 반복되므로 모니터 화면의 폴리선이 번쩍 거리므로 신경써서 마우스 포인트를 카카오맵 선 위에 놓아야 안정된 폴리라인을 볼 수 있음. 폴리라인의 색 반전은 "보색" 계산을 통해서 카카오맵의 선색의 보색이 나타남.
③ 지도 하단의 「선의 거리 계산하기」 button을 클릭하여야 실행됩니다. 일단 「선의 거리 계산하기」 코드가 실행되면 취소할 수는 없습니다. 자바스크립트에 대한 이해가 부족해 취소 코드를 찾지 못했습니다.
웹서버가 구동되면 아래와 같이 됩니다. 이 명령어로 웹서버가 구동되는 것이므로, 창을 닫으면 웹서버도 끊어집니다. 웹서버가 구동중에는 변동사항이 계속 갱신되는 것을 확인할 수 있습니다.
⑤ 인터넷에서 다운받은 동탄신도시 관련도면(Bessel1841, 중부원점)으로 테스트를 해봅니다. 임의의 위치에 점(point)을 찍습니다. 아래에서는 임의로 찍은 녹색점이 5개 정도 보입니다.
이렇게 하면, 굳이 폴리라인을 exlode하여 직선, 폴리선, 아크로 변환할 필요없이 그냥 하나의 폴리라인을 객체선택하면 됩니다. 다만, 3Dpolyline은 자료구조가 또 달라 이 방법은 안됩니다.
가) CAD Polyline Object의 Coordinates 속성에서, 좌표값 x1, y1, x2, y2, x3, y3, ... , 이런 식 데이터에서 P1 시작점과 P2 끝점을 얻고,
아래는 제 API 키입니다. 그 전에는 아무 거나 해서, Admin 키를 넣었는데, 이제는 JavaScript 키를 쓰라고 하네요. 보안때문에 Admin 키를 넣으면 안된다고 합니다.
플랫폼 | 앱 키 |
네이티브 앱 키 | 01ee7443일부번호 삭제f64a9ff55f |
REST API 키 | 09494119일부번호 삭제a18071369 |
JavaScript 키 | c2d2fc7d6d8839952c6357aaf0dfc2 |
Admin 키 | abe85ab7일부번호 삭제5132995 |
· 네이티브 앱 키: Android, iOS SDK에서 API를 호출할 때 사용합니다.
· JavaScript 키: JavaScript SDK에서 API를 호출할 때 사용합니다.
· REST API 키: REST API를 호출할 때 사용합니다.
· Admin 키: 모든 권한을 갖고 있는 키입니다. 노출이 되지 않도록 주의가 필요합니다.
② 기존에 편집된 HTML 파일이 있다면, 메모장에서 여서서, API 키 부분을 수정하여 저장하시면 됩니다. 조금 성가시게 되었습니다.
HTML 파일 15번째 줄에서,
<script type="text/javascript" src="http://dapi.kakao.com/v2/maps/sdk.js?appkey=abe85ab7일부번호 삭제513299580&libraries=services"></script> 이 것을,
<script type="text/javascript" src="http://dapi.kakao.com/v2/maps/sdk.js?appkey=c2d2fc7d6d8839952c6357aaf0dfc299&libraries=services"></script> 이렇게 바꾸고, 저장 후 실행하면 됩니다.
③ 블로거에 링크된 엑셀파일에도 API 키를 바꿔 놓았으니, 새로 다운 받으시면 됩니다. 또한 다음카카오의 정책이 언제 또 바뀔지 모르니, API 키는 다음카카오에 가입하여, API 키를 발급 받으셔서 본인 API 키를 쓰셔도 됩니다. 본인 API키를 쓰실려면, 엑셀 VBA 편집창에서,
ActiveCell.Cells(15, 1).Value = "<script type=" & """" & "text/javascript" & """" & " src=" & """" & "http://dapi.kakao.com/v2/maps/sdk.js?appkey=abe85ab7일부번호 삭제513299580&libraries=services" & """" & "></script>" 이 코드를 찾아, (ctrl+F 찾기해서)
ActiveCell.Cells(15, 1).Value = "<script type=" & """" & "text/javascript" & """" & " src=" & """" & "http://dapi.kakao.com/v2/maps/sdk.js?appkey=c2d2fc7d6d8839952c6357aaf0dfc299&libraries=services" & """" & "></script>" 이렇게 바꾸면 앞으로 실행할 때 마다 변경된 키가 입력됩니다.
14. [요청사항] "UTM 좌표로"
ⓘ UTM 좌표로 된 도면을 구하려 아무리 검색해도 구할 수가 없어서 UTM 좌표로 하는 것은 검증이 안되어, UTM-K 좌표 샘플을 인터넷에서 검색하여 "2021-01-15 글쓴이 김 형준
대한민국 최신 행정구역(SHP) 다운로드" 구하였습니다. 하여튼 UTM-K도 투영도법은 UTM이나, WTM이나 같으니, 투영상수만 다르게 적용하면 됩니다.
대한민국 최신 행정구역(SHP) 다운로드" 구하였습니다. 하여튼 UTM-K도 투영도법은 UTM이나, WTM이나 같으니, 투영상수만 다르게 적용하면 됩니다.
엑셀 시트에서 측지계 기준점을 아래와 같이 잘 맞춰야 합니다. 인터넷에 보니 X축 가산값이 1,000,000이라고 하는 함부로 막 쓴 정보도 있어 약간 지체되었습니다. 수학 그래프의 X축은 오른쪽 방향이나, 측지계에서 X축은 North방향이므로 X(N)은 2,000,000입니다.
② UTM-K는 WGS84타원체에 「경도 127.5˚, 위도 38˚, X축(N) 가산값 2,000,000m, Y축(E) 가산값 1,000,000m, 축척계수(Κ0) 0.9996」 상수를 적용해서,
울산광역시 울주군의 행정구역을 예로 들면,
첨부파일의 VBA 코드를 수정하여 다시 링크하니, 다시 다운 받으시면 됩니다. 카카오지도와 구글어스 코드만 수정하였고, 생태자연도는 사용빈도가 없어 고치지 않았습니다.
15. [질문사항] "좌표로 주소를 얻어내려고"
ⓘ 카카오에서 API 정책을 바꾸면서 여러 가지가 바뀌게 되었네요. 블로거 본문 11.과 같이 2021.03.22 이전에는 좌표주소 변환은 로컬에서 가능했는데, 이제는 웹서버를 통해야 하는 것 같습니다. 로컬에서 가능한 방법을 모르겠습니다. 프로그래밍을 해야 하는 것 같습니다.
현재 로컬에서 좌표주소 변환 코드가 있는 HTML을 실행하면 주소는 나타나지 않습니다.
게다가 웹서버를 통하게 되어 한글 인코딩도 UTF-8로 바꾸어야 합니다. 할 수 없이 메모장에서 HTML 문서를 열어서, 다른이름으로 저장에서 인코딩을 ANSI에서 UTF-8으로 바꾸어 다시 저장해야 합니다.
□ 2023.06.07(수) 수정사항 시작 : Google에서 「"Web Server for Chrome" 앱이 더 이상 지원되지 않습니다. 2022년 12월 이후에는 이전 버전의 Chrome 앱이 Window 기기에서 열리지 않습니다. 이용 가능한 새 버전이 있는지 확인해 보세요."라고 공지합니다. "구글"이나 "카카오다음"이나 '게임의 룰'을 자꾸 바꿉니다. 다른 로컬 웹서버를 구축해야 합니다.
④ 만약 수백개의 점(포인트) 좌표에서 주소를 알아내야 한다면, 첨부 엑셀파일에 포함된 VBA에 있는 '포인트 삽입' 매크로를 실행해서 한꺼번에 캐드 도면으로 보내고, 지번주소 변환을 한꺼번에 하면 주소를 쉽게 찾을 수 있습니다.
16. [요청사항] "카카오맵 지도타입 바꾸기"
'카카오맵 지도타입 바꾸기'는 클릭 버튼을 추가하였습니다. 화면 아래 '지적편집도'를 클릭하면 다음 화면과 같이 지적편집도가 오버레이 되고, '지도타입 안보기'를 클릭하면 지도타입이 사라집니다.
① 실행화면 : 충청북도 청주시 흥덕구 송정동 지적편집도. 참고로 API라 '교통정보 보기'를 클릭하면, 실시간 교통상황이 화살표로 나타나네요.
② 실행화면 : 경상북도 영양군 영양읍 지적편집도. 경상북도는 동부원점인데, 연속지적도는 중부원점입니다. 카카오지도의 지적편집도는 연속지적도와 일치하나, 카카오지도의 항공지도와 연속지적도가 어긋나 있습니다. 원인이 무얼까 궁금합니다.
③ 엑셀화면 : 「9. 지도type 선택」을 추가하여 지적편집도 보기와 안보기를 설정하였습니다.
④ 카카오맵 지도Type 선택버튼을 넣느라 공간이 없어, 모니터 세로화면은 100%에서 90% 줄이고, 남는 공간에 선택버튼을 넣었습니다. 지도 타입을 안 보고 싶으시면, 「지도타입 안보기」를 클릭하세요. 고친 엑셀파일은 블로거 본문에서 링크로 다시 다운 받으세요.
18. [응용사항] 상황에 따라 각각 달라서 설명드리기 어려운, 간단한 응용사항을 두서없이 적습니다.
ⓘ 카카오지도에서 폴리라인을 클릭하였을때 인포윈도우에 문자를 나타내는 사례입니다.
이 경우 캐드 도면에서는 텍스트의 위치가 SHP파일의 속성을 DXF로 변환할 때 처럼 폴리라인의 선위에 있어야 합니다. 이 때, 한 선분(폴리라인)과 한 점(텍스트)의 거리는 선형대수로는 vector product가 0이어야 하나, 소수점 연산문제로 0.0003m 이내일때는 0으로 간주하였으며, scalar product가 양수이며, 제곱거리보다 작을 경우 텍스트가 폴리라인 위에 있다고 계산하였습니다.
가. Polyline 선상에 있는 텍스트를 카카오지도에 나탸내기 위해서는 텍스트는 폴리라인의 선상에 있어야 합니다. 폴리라인의 각 성분 중 두 점을 잇는 선분 사이에 텍스트가 위치해야 합니다. 폴리라인의 좌표점에 위치하면 내적이 0이므로 양수가 안 되어 인식이 되지 않습니다.
다. '지도 실행버튼'을 클릭하면
- 다음과 같은 msgbox가 나타나면 주의사항을 한번 읽어보고 확인을 클릭하고
- 다시 캐드 화면에서 마우스로 폴리라인을 선택한 후 엔터하면 카카오지도가 실행됩니다. 너무 많은 문자와 폴리선을 선택하면, 2009년産 컴퓨터와 같이 성능이 떨어지면 시간이 오래 걸릴 수도 있습니다. 폴리선을 클릭한 후 로드뷰도 같이 보면 다음과 같이 확인할 수 있습니다.
캐드에서 폴리라인을 선택해도 카카오지도에서는 다각형의 폴리곤으로 구분하였습니다. 폴리곤내에 포함된 텍스트의 구분은 직선과 직선의 교점의 개수를 구하는 기하학의 방정식으로 판단할 수 있습니다.
③ 카카오지도를 캡쳐해서 캐드 화면에 배경으로 사용할 때
가. 공사계획평면도에서 도면의 배경이 필요한 부분에 EX)가로×세로 200m인 선을 그린다.
- 크기가 조정된 사진을 move하여 당초에 그린 사각형과 일치 시킨다. 아래 그림에서 캐드 도면을 축소하여 화면에서는 실제 해상도보다 낮게 나오나, 확대시에는 실제 해상도로 보인다.
라. 카카오지도는 중부 단일원점이므로, 경도 127도에서 멀어질 수록 진북방향이 틀어지므로, 동부원점의 경우는 경위도에 맞게 사각형을 그리고, 래스터 이미지로 인서트 후 회전하여 맞추면 된다.
19. [오류찾기] ProgID때문에 오류 찾기 중입니다. 다른 분들은 다운로드 하지 마세요.
20. 2022.12.27(화) 수정사항. '마우스 클릭' 유지. 대신 폴리라인을 마우스 클릭시 폴리라인의 보색으로 나타나며, '마우스 move' 할 때(마우스를 폴리라인 선상에 갔다가 나오면) 원래 폴리라인 색상으로 나타 내게 함.
마우스 오버, 아웃 時 모니터 화면의 폴리선이 번쩍거려 너무 신경 쓰여서, "폴리라인을 마우스 클릭시 보색(반전색깔)으로 나타나고, 마우스로 폴리라인의 선상을 지나가면 (mousemove) 원래 폴리라인의 색상으로 나타나게 함. 이미 클릭하여 색깔이 반전된 폴리라인을 마우스로 지나가면, 당초 그 폴리라인에 지정한 색깔로 나타 남.
21. [요청사항] '선의 거리 계산하기' 코드 추가. 2022.10.12(수) 수정사항.
※ CODE 검증이 안되어 ERROR를 발견하신 분은 알려 주십시요.
① Kakao Maps API의 「선의 거리 계산하기」 샘플 code를 복사, 붙여넣기 하여 '선의 거리'를 지도에 나타내는 코드를 추가 하였습니다. "도보, 자전거 소요시간"은 필요 없을 것 같아 삭제하였습니다.
② Kakao Maps API의 샘플과 같이 "지도를 마우스로 클릭하면 선 그리기가 시작되고
오른쪽 마우스를 클릭하면 선 그리기가 종료됩니다."22. 안드로이드 11인가 이상 부터는 아예 "file:///" 에서는 그림파일 종류외에는 접근이 안되게 되어 있는 걸 알았습니다. 스마트폰에서 위치추적기(GPS)를 쓸 수 없다면, 내비게이터는 별 의미가 없네요.
'아이쿠'님 몰랐던 사항을 알려 주셔서 감사합니다.
안드로이드 정책으로 핸드폰에서 첨부된 문서를 찾을수 없다면 현재 사용하시는 폰의 안드로이드버전이 높으셔서 안되는것이고 구버전의 안드로이드폰을 사용하시면 본문에서 언급하신 내용으로 파일을 찾아서 실행하시면 현위치가 나타납니다.
① 그런데, 로컬에서 실행하는 HTML 파일의 카카오지도에서 GPS 기능을 써야 할 일이 생겼습니다. 안드로이드 10이하의 스마트폰에서 실행해야 하는데 스마트폰 유심칩 규격이 안 맞아 생각한 것이 "모바일 핫스팟"입니다. 모바일 핫스팟으로 공기계에서 Wi-fi로 인터넷에 연결한 다음 실행했습니다.
③ 스마트폰 공기계의 설정을 GPS만 사용하도록 설정합니다. 그러면, 실내, 지하, 고층건물들 사이에서는 GPS 수신이 안되어 현재 위치를 찾느라 배터리 소모가 많으나, 탁 트인 야외에서는 보다 정확한 위치(대략 3.5m 이내)를 나타냅니다.
④ 정밀도가 높은 GPS 측량기나, 정밀도가 낮은 스마트폰의 GPS 센서나, 따로 보정신호를 수신하지 않는다면 GPS위성의 신호가 우주에서 지표까지 도달하는 과정에서 전리층 오차, 대류층 오자, 기타 오차등으로 시간에 따라, 날씨에 따라, 위치에 따라 매번 바뀌어 ±30m 이내의 오차를 나타냅니다.
GPS 측량기는 '위성기준점'의 보정신호를 네트워크로 실시간으로 수신하므로 몇 cm급의 정확도를 나타냅니다. 보정신호를 받지 않는 스마트폰은 맑은 날, 개활지에서 GPS를 수신하였을 때 대략 ±3.5m의 정확도, 운이 좋을 때는 ±1.5m의 정확도, 운이 나쁠 때는 ±30m의 정확도를 얻을 수 있습니다.
23. 2023.01.15(일) 요청사항. 폴리라인은 lwpolyline (ObjectName은 "AcDbPolyline"), polyline (ObjectName은 "AcDb2dPolyline","AcDb3dPolyline") 두 가지 모두 같이 선택되게 했다. 카카오맵이나 구글어스에서 두 종류의 폴리라인 표현은 구분없이 평면상으로 polyline으로 같게 표현한다.
① 샘플도면에서 객체 특성을 보면 폴리라인은 LWPOLYLINE과 POLYLINE이 섞여 있다.
24. 2023.03.19(일) 요청사항. "아이쿠"님이 말씀하신, 「캐드문자에 대한 불편함」과 관련하여, 캐드에 있는 문자를 읽어 들여 카카오지도에 나타나게 함. 기존 텍스트를 인포윈도우(말 풍선)로 표현하는 Code는 삭제하고, 텍스트를 CustomOverlay로 문자 색상을 선택하고, 문자 크기를 배율로 선택하여 표현함.
① 샘플 캐드도면 (인터넷 검색으로 다운 받은 강원도 원주시 원주기업도시 계획평면도)
② 샘플 캐드도면을 카카오지도에 폴리라인과 Text(CustomOverlay)로 표시.
문자 색상은 Worksheets("영은").Range("C14") 셀 等에서 "검정+무지개색+캐드선색대로" 클릭하여 선택하고,
문자 크기는 기본 1m를 1px로 설정하고, Worksheets("영은").Range("A118") 셀에서 '0.1배, 0.2배, 0.5배, 1배, 2배, 5배, 10배로 클릭하여 선택할 수 있음.
③ 아래와 같이 샘플 캐드도면을 카카오지도에 폴리라인과 기존의 Text(인포윈도우)로 표시하는 CODE는 삭제함.
25. 2023.06.07(수) 요청사항. "스페이스"님이 말씀하신, 「크롬에서 "Web Server for Chrome" 앱 사용중지에 따른 대체 웹서버」를 찾아 보았습니다.
① Google에서 「"Web Server for Chrome" 앱이 더 이상 지원되지 않습니다. 2022년 12월 이후에는 이전 버전의 Chrome 앱이 Window 기기에서 열리지 않습니다. 이용 가능한 새 버전이 있는지 확인해 보세요."라고 공지합니다.
아래와 같은 크롬 확장프로그램으로 간단해서 좋았는데, 이제는 크롬에서 사용중지 되었습니다.
② 다른 간단한 방법을 찾아 보니, "python으로 웹서버 실행」하는 방법이 있습니다.
가. 먼저 python 프로그램을 설치합니다. 파이선 홈페이지(python.org)로 이동합니다. 다운로드(download)에서 Python "3.11.4(현재 최신버전)을 다운 받습니다. 저는 64bit 운영체제이므로, "Windows installer (64-bit)"를 다운 받았습니다.
Version | Operating System | Description | MD5 Sum | File Size | GPG | Sigstore |
---|
Windows installer (64-bit) | Windows | Recommended | e4413bb7448cd13b437dffffba294ca0 | 25426160 | SIG | .sigstore |
나. 다운로드 받은 파일을 더블클릭하여 python을 설치합니다. 설치 전에 PATH란에 체크해 주세요. 기본 값은 체크 해제 되어 있습니다.
설치가 완료되면 닫아주세요.
③ 키보도에서 윈도우 로고 key + R key를 동시에 눌러 실행창을 띄운 다음 "cmd"를 입력하고 확인을 누릅니다.
그러면, DOS 명령어창이 나타나고, 웹서버를 실행할 폴더로 이동합니다. 제 경우는 C:\temp에 저장하기 때문에 C:\>cd C:\temp 입력하고 엔터합니다. 그러면, C:\Temp> 폴더로 이동되고, C:\Temp>python -m http.server 8080을 입력하고 엔터합니다. 포트는 꼭 8080을 입력하세요. python 기본값은 8000인 것 같은데, 이유는 모르지만, 8080을 해야만 카카오지도와 연결됩니다. 명령어에서는 8080 앞에 콜론(:)이 없이 그냥 python -m http.server 8080을 입력하세요.
웹서버가 구동되면 아래와 같이 됩니다. 이 명령어로 웹서버가 구동되는 것이므로, 창을 닫으면 웹서버도 끊어집니다. 웹서버가 구동중에는 변동사항이 계속 갱신되는 것을 확인할 수 있습니다.
④ 웹서버가 구동되면, 브라우저 주소창에 localhost:8080을 입력하면 다음과 같이 연결됩니다.
⑤ 인터넷에서 다운받은 동탄신도시 관련도면(Bessel1841, 중부원점)으로 테스트를 해봅니다. 임의의 위치에 점(point)을 찍습니다. 아래에서는 임의로 찍은 녹색점이 5개 정도 보입니다.
이 도면으로 탐색기에서 실행하면 주소는 보이지 않고,
26. 2024.03.29(금) Autocad가 아닌, 대안 캐드인 ZWCAD를 사용할 경우.
① 엑셀 창에서 Alt+F11을 눌러 VBA 창을 띄운 다음, 바꾸기(Ctrl+h)에서 "현재 프로젝트" 클릭, 찾을 내용 "Autocad" 입력, 바꿀 내용 "ZWCAD" 입력한 후 모두 바꾸기 실행하여 26개를 일괄 변경한다.
③ 만약, 라이브러리가 누락되었다면, 메뉴 도구-참조에서 "ZWCAD 2021 Type Library" 等 자기 PC에 설치된 ZWCAD 버전에 맞는 라이브러리를 참조하시면 됩니다.
27. 2024.05.26(일) 추가사항. 캐드 객체종류(Entity)별로 클릭하기 성가시어 Arc, Line, Polyline(3종), Text(2종), Circle, Elllipse, Point, Leader는 한번에 선택하여 카카오맵에 나타나게 함. 카카오맵 code만 수정했으며, 구글어스(안함), 생태자연도(안함), "Entity 다중 선택"을 클릭하여 선택한 후 실행하면 됨.
주1) 캐드 포인트는 카카오맵에 없어, 반지름 0.1m의 원으로 표현
주1) 캐드 포인트는 카카오맵에 없어, 반지름 0.1m의 원으로 표현
주2) 캐드 텍스트는 카카오맵에서 상대값으로 표시되므로 확대, 축소시에도 화면상에는 같은 크기임.
주3) 캐드 지시선(Leader)은 시작점에 화살표가 표시되도록(카카오맵 startArrow : True)함.
주3) 캐드 지시선(Leader)은 시작점에 화살표가 표시되도록(카카오맵 startArrow : True)함.
주4) 캐드 폴리라인에 호(Arc)가 포함되어 있는 경우 직선으로 표시되므로, 호를 포함한 폴리라인은 Explode하여 실행해야 왜곡이 안됨.
2024.06.06(목) 수정사항 : 선 종류 선택의 "Entity 다중 선택" 프러시져에서 lwpolyline, 2Dpolyline에는 폴리라인에 포함된 호(Arc)를 표시함. 나머지 프러시저에서는 호(Arc)를 표시 못함.
① 샘플도면
① 샘플도면
28. 2024.05.29(수) 요청사항. Autocad가 아닌, 대안 캐드인 Bricscad용 VBA 수정.
① CAD 종류가 많네요. Autocad, ZWCAD, BricsCAD, etc. Bricsys 홈페이지에서 브릭스캐드 무료평가판(30일)을 다운로드 받을 수 있었습니다.
② 사용하는 캐드 종류가 BricsCAD임을 VB에 알려 줘야 하므로,
Autocad.Application → BricscadApp.AcadApplication 바꿔 주고, 파일 이름도 바꿔 줘야 하므로, Autocad용 → Bricscad용 으로 찾기/바꾸기(2024.06.16부터 수정) 해 준다.
참조도 AutoCAD... 타입 체크해제하고, BricscadApp Type Library 24.0으로 설정해 준다.
③ 이와 같이 두 가지만 바꾸면 CAD 종류를 브릭스캐드로 인식하여 실행하는데는 문제가 없으나, 기존 엑셀 VBA 코드에서 사용자 실수를 방지하기 위해 파일명을 "20210127_kakaomap_Google earth_생태자연도.xlsm"로 제한했기 때문에, 혼동을 방지하기 위해 파일이름을 "20240329 Bricscad용 kamap_Gmap_생태자연도.xlsm"로 변경한다. VB 코드에서도 찾기,바꾸기를 통해 엑셀 파일명과 동일하게 일괄 변경해 준다.
엑셀 VBA를 실행하게 되면, 결과는 카카오지도의 경우 "C:\Temp\"에 20240329 Bricscad용 kamap_Gmap_생태자연도.htm"로 저장된다.
④ 브릭스캐드 도면과 카카오지도 결과
e.g. 브릭스캐드 도면
e.g. 카카오지도 결과
⑤ BricsCAD 用 엑셀파일은 아래 링크로 다운 받으세요. 파일명도 바꾸었으니, 이 파일 이름으로 사용하셔야 실행됩니다.
29. 2024.06.06(목) 수정사항. 호(弧, ARC)가 포함된 폴리라인(lwpolyline, 2Dpolyline)을 카카오지도에 나타낼 때, Arc 부분을 약 5˚ 내외의 각도로 분할하여 직선좌표로 표현하는 code 추가. 선 종류 선택의 "Entity 다중 선택" 프러시져에서 lwpolyline, 2Dpolyline에만 적용됩니다.
① 일반적으로 호(弧, ARC)가 포함된 폴리라인을 카카오지도에 표현할 때, 아크 부분은 arc의 시점과 종점만을 직선으로 표현됩니다.
이는, 가) 캐드 Polyline Object의 Coordinates 속성과 GetBulge method, 나) 카카오지도에서 아크를 지원하지 않기 때문에 발생합니다.
예를 들면, 아래와 같은 예제 도면에서 호가 포함된 폴리선을 선택하면, 아크부분은 돌출부가 생략된 채로 직선으로 나타난다.
② 캐드 Polyline Object에서는 polyline에 포함된 호의 시작점 좌표, 끝점 좌표, Bulge값 3가지만 저장되어 있습니다. 그러므로, 3가지 값으로 반경(R), 중심점(C), 시점각과 종점각 4가지를 계산하여, 아크 부분을 임의로 지정한 5˚ 내외의 직선좌표로 변환하여 나타내면 다음과 같이 됩니다.
이렇게 하면, 굳이 폴리라인을 exlode하여 직선, 폴리선, 아크로 변환할 필요없이 그냥 하나의 폴리라인을 객체선택하면 됩니다. 다만, 3Dpolyline은 자료구조가 또 달라 이 방법은 안됩니다.
③ 캐드 polyline에서 포함된 Arc의 속성을 구하는 것은 아주 어려운 일입니다. 물론 CAD VBA에 포함된 ThisDrawing.Utility.AngleFromXAxis() 함수와 Distance() 함수를 이용하여 간단히 할 수도 있을 것 같지만, 여기서는 EXCEL VBA에서 순차적으로 계산하였습니다.
아래와 같은 예제 도면에서,
가) CAD Polyline Object의 Coordinates 속성에서, 좌표값 x1, y1, x2, y2, x3, y3, ... , 이런 식 데이터에서 P1 시작점과 P2 끝점을 얻고,
나) CAD Polyline Object의 GetBulge 메서드에서, b(1), b(2), b(3) ..., 이런 식 데이터에서 bulge(index)값을 불러 올 수 있습니다.
CAD Arc Object의 자료구조와 polyline에 포함된 arc의 자료구조는 다릅니다.
다) bulge값은 S(sagitta) / 선분P1P3(half chord)의 비율로써, bulge = 0이면 직선, bulge = ±1이면 반원, bulge > 0 이면 호가 반시계방향으로 그려지고, bulge < 0 이면 호가 시계방향으로 진행됨을 의미합니다.
라) 폴리라인의 좌표점을 추출할 때, GetBulge(i) = 0이면 직선으로 다음 좌표점까지 직선으로 계산합니다.
GetBulge(i) <> 0 아니면 호(弧)이므로 그 때 좌표점 x, y를 시작점(P1)으로, 다음 좌표점 x+1, y+1을 끝점(P2)로 판단하고 계산을 시작합니다.
마) 현의 길이 절반 P1P3(half chord)와 현의 가운데 점 좌표 P3는 P1, P2에서 간단히 나오고, θ/4 = arctangent(bulge)이므로, 호의 중심각 θ = 4 × arctangent(bulge)입니다.
바) P1P3(half chord) 길이와 호의 중심각 θ가 구해졌으므로, 반경 R(radius) = (half hord) / Sin(θ/2)이 나옵니다.
사) 현의 중심점에서 아크 중심점까지의 거리 S(sagitta) = half chord × bulge
아) P3점을 기준으로 P3P1의 각도는 P3P1(α) = atn(dy/dx)
자) P3점을 기준으로 P3P5의 각도는 P3P5(β) = P3P1(α) - (π/2 = 90˚) (P3는 모든 점에서 수직)
P3P5의 길이는 radius - sagitta
차) 그러므로, 아크의 중심점은
C(x) = 현의 중심점(x) + P3P5 길이 × Cos(P3P5(β))
C(y) = 현의 중심점(y) + P3P5 길이 × Sin(P3P5(β))
카) 시점각 = arctangent { P1(y) / C(y) ÷ P1(x) / C(x) }
종점각 = arctangent { P2(y) / C(y) ÷ P2(x) / C(x) }
타) 코딩에서 주의할 점은, cad에서는 각도가 0 ~ 2π 라디안 범위이므로, arc가 1/4분면과 4/4분면을 교차할 때는 음수(-, negative)에 유의하여 에외처리 code를 추가하여야 합니다.
e.g.
If filterent.GetBulge(i / 2) > 0 And 종점각 < 시점각 Then 종점각 = 종점각 + (pi * 2)
If filterent.GetBulge(i / 2) < 0 And 종점각 > 시점각 Then 시점각 = 시점각 + (pi * 2)
파) Polyline에 포함된 마지막 객체가 아크이고, Object.Closed = true 일때, bulge값이 있는 경우이므로, ElseIf i = (UBound(삽입점) - 1) Then으로 예외처리 코드를 추가했다.
※ 2024.07.21(일) 두 개의 arc로 이루어 진(圓과 같은 형상) polyline의 표현코드 수정했다. AcDb2dPolyline은 안 고침.
④ CODE가 계속 추가되고, 변경되다 보니 file 이름도 헷갈리고 해서 파일명을 바꾸었습니다. project에 지정된 파일명과 다르면 혹시 작업중인 다른 엑셀파일에 영향을 줄까봐 실행을 중지하게 하였는데, 쓸데없는 짓을 한 것 같습니다. 이제는 헷갈려서 지울 수도 없네요. 바꾼 파일명은 "20240329 Autocad용 kamap_Gmap_생태자연도.xlsm"으로,
본문 8-⑨를 다운로드 하세요.
끝.
빠르고 정확하고 쉬워서 놀랐습니다. 감사드립니다. 혹시 환경공간정보서비스에 있는 생태자연도 도 끌어올 수 있는건가요? 혹시해서 오늘 하루 종일 들여봤는데 해결을 못했네요?
답글삭제1. 댓글을 남겨 주셔서 감사합니다. 말씀하신 환경부 '환경공간정보서비스'를 보니, 너무 잘 되어 있네요. 환경부에 엄지 척!
삭제2. '환경공간정보서비스'에서도 Open API 서비스를 제공하니, Daum지도나 Naver지도와 같이 응용할 수 있습니다. 회원 가입하여 API키를 받고, HTML 문서를 작성하여 웹에서나 로컬에서 실행하면 됩니다. 직접 안해 보고 이런 소리 합니다.
3. '환경공간정보서비스 > 자료신청 > 생태자연도 Download' : 파일 제공형식이 SHP파일이어서 ArcMap에서 좌표를 읽어 와야 하나, 엑셀에서 작성한 비주얼베이직 code를 ArcMap에 맞게 고쳐야 해서 복잡합니다. 그래서 SHP파일의 경우에는, 저는 ArcView의 'avdxfExt.avx' 익스텐션을 이용해 CAD파일로 변환해서 사용합니다.
4. 생태자연도의 좌표계를 확인합니다. ①WGS84 인지 Bessel1841인지, 요즘은 측량법에 의해 WGS84(세계측지계)일 겁니다. ②투영원점은 중부원점인지, 동부원점인지 등을 알아 봅니다.
엑셀에서 매크로를 실행하면, 캐드화면에서 선택한 객체들의 TM좌표값을 가져오고, 각 객체의 TM좌표를 경위도좌표로 변환하여 HTML이나 KLM파일을 작성합니다. 이런 문서들은 Daum지도나 google어스에 맞워져 있으므로, 생태자연도를 사용하고자 하면 코드를 바꿔줘야 합니다. 엑셀에서 'Alt키+F11'을 동시에 누려면, VB 프로젝트 창이 뜨는데, Module1에 코드들이 있습니다. 제가 만들어서 남이 보기에는 쉽게 이해가 가지 않겠지만, 필요한 부분을 적절히 수정하셔서 '생태자연도'를 활용하시기 바랍니다. 끝.
우선 답변 감사합니다. 한번 해보겠습니다.^^;; VB 무식이라 맨땅에 헤딩 할거 같지만 최대한 해보고.....결과 알려드릴께요^^
삭제혹시 캐드 2016버전은 안되나요?
답글삭제컴파일 오류입니다: 프로젝트나 라이브러리르 찾을 수 없습니다.
dim filterset as acadselcectionset 라는 부분에 파란색으로 칠해져있고 오류메세지가 나옵니다
여기서 위의 오류 메시지를 확인, 누르면 누락에
1.visual basic for application
2.microsoft excel 16.0 object libray
3.ole automation
4. microsoft office 16.0 object libray
5. 누락: autocad 2007 type libray
5개 항목이 체크되어있고 계속 현상이 반복됩니다. 부탁드릴께요. 이기능이 저에게 필요해요!
1. 오토캐드 2016버전은 인터넷 검색해보니 "AutoCAD 2010부터는 기본적으로 VBA 모듈이 함께 설치되지않아 별도로 설치해주셔야 합니다." 라고 합니다. VBA 모듈이 이미 설치되어 있을 수도 있고, 아니면 설치되어 있지 않을 수도 있으니 https://autoc.tistory.com/34의 설명대로 설치하시고,
삭제2. 아마도, 엑셀에서 VB창을 띄운 다음 도구(T)메뉴-참조(R) VBA project에서 AutoCAD 2016 Type Library에 체크해 주셔야 엑셀VB와 캐드VB가 서로 연결됩니다. 2007은 체크 해제 해 주시고.
감사합니다 한번해볼께요!
삭제작성자가 댓글을 삭제했습니다.
답글삭제좋은 자료 감사합니다.
답글삭제죄송하지만 한가지 VBA 코드를 여쭤봐도 될까요?
6. 기타 프러시져에서 ACAD POLYLINE 좌표 가져오기 매크로에서
기준점을 클릭하고 기준 표고값을 선택하면
이 기준점을 기준으로 0, 표고값이 되어 상대좌표로 엑셀로 가져오기가
가능할지 문의드립니다.
저도 요즘 매크로 공부를 막 시작했는데 아직 캐드와 연동은 무지한지라ㅠ
이렇게 문의 부탁드립니다.
감사합니다.
이 블로그를 처음 접해보는지라 구글에서 닉네임 변경했다고 생각하고 다시 등록했는데 계속 Unkown으로 뜨네요ㅠ
삭제닉넴은 펠로s로 변경하였습니다.
1. 안녕하세요. 기준점이라는 의미가 각 폴리라인 마다의 기준점이신지, 아니면 도면에서의 임의의 포인트를 말씀하시는지요?
삭제2. Sub ACAD_POLYLINE좌표_가져오기()의 코드에서는, 캐드에서 폴리선을 여러개 선택하는 것과 같이, 각 폴리선마다 캐드에서의 좌표(X,Y)를 엑셀의 현재셀을 기준으로 입력합니다.
① 코드에서 26번재 줄 : ActiveCell.Cells(1, 1).Value = 삽입점(i)을 ActiveCell.Cells(1, 1).Value = 삽입점(i) - 삽입점(0)로,
코드에서 27번째 줄 : ActiveCell.Cells(1, 2).Value = 삽입점(i + 1)을 ActiveCell.Cells(1, 2).Value = 삽입점(i + 1) - 삽입점(1)와 같이 각각 - 삽입점0, -삽입점(1)을 추가하여 주시면,
그 폴리선의 시작점 좌표는 (0,0)이 되며, 두번째 좌표는 첫번째 좌표를 기준으로 상대좌표로 나타납니다.
② 아니면, 그 폴리선의 마지막 좌표를 기준으로 하고 싶다면, 역시 각각 삽입점(0) 대신에 삽입점(UBound(삽입점) - 1)을, 삽입점(1) 대신에 삽입점(UBound(삽입점))으로 수정해 주시면 마지막점 좌표를 기준으로 상대좌표로 나타납니다.
3. 현재 열린 캐드 도면의 임의의 한점을 기준으로 하고 싶으시면, 기준점에 대한 좌표 계산값을 구하는 코드를 추가하셔야 합니다. 코드 추가하지 말고, 엑셀시트에서 X,Y값을 계산하셔도 됩니다. 끝.
답글 감사합니다. 많은 공부되었습니다.
삭제3번과 같이 임의의 한점을 기준으로 하고자 했던것이라
기준점에 대한 좌표 계산값을 추가하여 제가 원하는 부분을
해결하였습니다.
답변 감사합니다~!!
참고로 공유해주신 위 매크로를 제가 임의로 일부 수정했습니다.
다음지도가 하이브리드가 아닌 스카이뷰로 불러올 수 있고
또한, 지적편집도 등 오버레이추가하는 부분을 옵션을 두었습니다.
필요하시면 메일주소 알려주시면 보내드리도록 하겠습니다.
안녕하세요
삭제하이브리드 맵도 사용하고 싶어서 그런데 혹시 수정하신 파일을 받아볼 수 있을까여?
jungho_82@nate.com
부탁드립니다.
안녕하세요. 덕분에 잘 사용하고 있고 업무시간도 많이 줄었습니다. 제 메일로 연락한번 부탁드립니다. jong2bae@hanmail.net
답글삭제생태자연도를 따라가면 작성자님께서 샘플로만들어 놓으신 화면이 출력됩니다. 인덱스파일2개를 새로만들어야하는건가요? 제가 설정한 레이어로 출력이 되지않더라구요 어떻게 해야할까요
답글삭제1. 로컬호스트를 실행하기 위해서는 임의로 아무렇게 이름 붙인 폴더인 "C:\Users\user\new-project"라는 폴더를 만들고, new-project 폴더에 파일 index.html, index.js, package.json을 붙여 넣어야 하는데, 이 세 개의 파일은 필수적으로 있어야 합니다.
삭제2. 링크된 샘플 index.js는 전남 무안군 무안읍의 행정경계 자료입니다. 단순히 주소창에서 http://localhost:1234 입력하면 자꾸 무안읍 행정경계만 나타납니다. index.js가 안 바뀌니 무안읍 행정경계만 나타납니다.
3. 엑셀에서 버튼을 클릭하여 캐드의 폴리선을 선택하고 엔터를 치면, 코드 ActiveWorkbook.SaveAs Filename:="C:\Users\user\new-project\index.js", FileFormat:=xlTextPrinter, CreateBackup:=False에 의해 index.js 파일을 덮어 쓰고, 캐드의 폴리선을 생태자연도에 나타내게 됩니다. 끝.
^^제가 드린 문의 이후로 많은댓글이 달려있네요. 즐거운 크리스마스. 연말 되세요~
답글삭제안녕하세요
답글삭제새해 복 많이 받으세요 ㅎ
선타입을 추가하고 싶은데 어떻게 하는지 알려주실 수 있을까여?
jungho_82@nate.com
로 알려주시면 감사하겠습니다.
1. '선타입'이라고 하시면, 실선, 파선, 일점쇄선, 이점쇄선 등 선종류를 말씀하시는 것 같은데요,
삭제2. 카카오지도 기준으로 말씀드리면, 카카오지도에서는 11가지 종류의 선 스타일이 있습니다. 카카오맵 API 설명서에 보면, solid
shortdash shortdot shortdashdot 等이 있습니다.
3. 이미 만들어진 HTML 문서를 메모장이나 워드패드에서 여서서, 예를 들면 「strokeStyle: 'solid'」를 찾아 「strokeStyle: 'shortdash'」와 같이 선스타일을 직접 입력하셔도 되고, 찾기/바꾸기를 통해 한번에 바꾸셔도 됩니다.
4. 카카오맵은 선 종류가 11개입니다. VBA 코드를 고치면 될 것 같아, 복사/붙여넣기 해서 수정하였습니다. 블로거에서 새로 다운 받으시면 선 스타일을 11가지 중에서 선택하실 수 있습니다.
5. 실선(solid) 이외에는 필요한 적이 없어 이번에 알게 되었네요. 감사합니다. 끝.
첨부파일이 어디에 있나요
답글삭제게시글의 순번 "8. 첨부파일"에 구글 드라이브 링크가 있습니다. 보안 프로그램이 깔린 PC에서는 구글 드라이브에 접속이 안 된다고 들었습니다. 보안 프로그램이 설치되지 않은 PC에서 다운로드 하시면 될 겁니다.
삭제안녕하세요. 캐드파일 맵에서 연동하는걸 이것저것 스터디 해보다가 이 자료를 찾아보고 엄청 많은 도움이 되고 있습니다. 연동도 설명해놓으신거처럼 아주 잘되네요!! 다만 캐드선중에 선,폴리선,원은 적용이 잘되나 잘린 원(캐드상 호)은 호로 인식을 못하고 직선으로 처리되네요.. 제가 무엇인가 설정을 잘못한것인지 아니면 더 업데이트가 필요한것인지 궁금하네요..시간되실때 답변 주시면 감사하겠습니다^^~
답글삭제1. acad의 弧를 카카오지도에 나타내고자 하는 것인지요? 「Kakao 지도 web API 문서」를 읽어 봤는데, 아직 카카오지도에서는 Arc를 지원하지 않네요. 구글어스도 마찬가지일 겁니다. 그러므로, Arc를 카카오지도에 정확히 표현할 수 없습니다.
삭제2. "다만 캐드선중에 선,폴리선,원은 적용이 잘되나 잘린 원(캐드상 호)은 호로 인식을 못하고 직선으로 처리"라고 하셨는데, 아마 line과 arc가 pedit로 묶인 polyline을 선택하신 것 같습니다. 제가 만든 기존 VBA 코드에서는 arc 객체가 선택이 되지 않습니다. 그런 code가 없었습니다.
3. polyline에 arc가 섞여 있다면, 좌표측설 時에도 곤란하고 explode로 부숴 버리는게 어떠신지요?
4. 링크된 첨부파일에 수정된 code를 추가 하였습니다. Arc 객체를 선택하면 대략 5˚내외로 Arc를 분할하여 polyline의 좌표로 계산하여 카카오맵에 나타냅니다. 원하시는 정밀도는 ▶ 분할갯수 = Application.WorksheetFunction.RoundUp(Abs((종점각 - 시점각) / (5 * 3.14159265358979 / 180)), 0) ◀ 에서 '5'부분을 수정하시면 됩니다. degree 값입니다. 끝.
친절한 답변 감사합니다^^~ 업무에 많은 도움이 되고있습니다.
삭제올려주신거 정말 잘쓰고있는데요 제가 각지점에 텍스트와 포인트를 넣는거를 쓰는데 죄송한데 그 각지점마다의 주소는 알수없나요? 좌표로 각 포인트의 주소를 알고싶은데 방법좀 부탁드립니다
답글삭제1. 현재 엑셀 매크로를 실행했을때에는, 오토캐드(ACAD) 도면의 포인트를 선택했을때, 카카오지도에는 반지름 1m인 원을 그리게 했습니다.
삭제2. "좌표로 각 포인트의 주소를 알고싶은데" 라고 하신 말씀은,
① 카카오지도에서 생성된 포인트(작은 원)를 마우스 클릭했을때 주소가 나타나게 하나요? 아니면,
② 카카오지도에서 생성된 포인트(작은 원)마다 인포윈도우에 주소가 항상 나타나야 하나요?
③ 아니면, 지번을 뜻하는 주소가 아니라, 다른 의미의 주소인지요? 어떻게 사용하시는지 제대로 이해 못해서 다시 여쭤봅니다. 끝.
지번주소가 필요합니다.
삭제작은원 위 인포윈도우가 명칭을 얘기하는거같은데 같이 나오면 좋을거 같아요
1. [요청사항] ACAD 도면의 POINT를 선택시 포인트의 좌표에 해당하는 주소를 카카오지도에 표시하는 코드 추가하였습니다.
삭제2. 수정한 코드를 포함한 엑셀파일을 업데이트 하였습니다. 블로거 본문의 링크에서 엑셀파일 20190815_kakaomap_Google earth_생태자연도.xls을 다시 다운 받으세요. 샘플 파일은 블로거 본문 8.첨부파일-⑦20201128 CAD 포인트좌표를 kakaomap에 주소로 표시.htm에 링크 했습니다.
3. 실행과정과 결과를 블로거 본문 「11. [요청사항]...」에 게시하였으니, 참고하시기 바랍니다.
4. 간략 설명입니다. 엑셀 화면에서 「선 종류」에 추가 하였습니다. 기존 Point는 도면상의 Point 그대로이고, Point(지번주소)는 도면상의 Point 좌표에 해당하는 주소를 카카오지도에서 읽어 와서, 인포윈도우로 카카오지도에 나타내 줍니다. 포인트는 크기가 반지름이 1m인 작은 원으로 표현하였습니다.
샘플 파일은 충북 청주시 흥덕구 봉명동의 지적도를 예로 들었습니다. 지적도에 포인트를 여러개 찍었습니다.
카카오지도를 실행하면 너무 좁아서 인포윈도우가 겹쳐서 보입니다. 주소가 긴 경우에는 칸이 넘어가서 인포윈도우를 넘어 표시되어, 조금 보시기 불편할 수 있습니다. 인포윈도우 밑에 자세히 보시면 검은색으로 마지막 숫자가 보입니다.
5. 주의사항 : ① 지적도는 특성상, 구좌표계 인지 신좌표계 인지를 필히 확인해야 하며, 원점경도도 주의하셔야 합니다. ② 좌표계 변환 특성상 TM 오차가 ±30cm 이상 항상 나며,(국토지리정보원의 변환식), 다음카카오의 항공사진은 경험상 대략 ±2m 까지 오차가 있습니다. 끝.
감사합니다.
삭제직접실행해 본결과 글자가 잘리는 경우가 있습니다.
삭제뒤 숫자가 잘리는데 볼수 있는 방법은 없는지요...아니면 앞에 지번주소라는 글자만 없어도 안 잘릴듯 합니다.
계속 귀찮게 해드려 죄송합니다.
1. 주소가 인포윈도우 안에만 나타나게 제한하는 style 추가했습니다. 다시 다운 받으세요. 끝.
삭제정말감사합니다
삭제안녕하세요 작성자님 정말 유용하게 읽어보고 확인했습니다.
답글삭제한가지 여쭤보고싶습니다만.
캐드상의 폴리선 형태를 구글어스로 가져오는것은 가능하지만 블록형태로 가져오려면 어떻게 해야하는건지 여쭤봅니다.
감사합니다.
가능하다면 블록이 아니여도 캐드에 있는 라인의 색깔을 그대로 따올 수 있는 방법이 있는지 여쭤봅니다
삭제지금은 모임 중이라 들어가서 확인하겠습니다.
삭제1. 질의하신 사항이 아마도 캐드 도면상의 폴리선 색상을 구글어스에 그대로 나타내고 싶으신 것인지요? 그래서, 구글어스에서만, 캐드 도면의 폴리선의 색상을 그대로 나타나게 하는 코드를 추가하고, 엑셀파일을 따로 첨부하였습니다. "20210127_kakaomap_Google earth_생태자연도.xlsm" 본문의 "8. 첨부파일 ⑧" 링크를 클릭하시면 새로 다운 받을실 수 있습니다.
삭제2. 캐드 도면에서 각 폴리선에 따로 색을 지정하지 않았다면 레이어 색을 나타내고, 각 폴리선에 따로 색을 지정했다면, 레이어 색보다 앞서 객체에 지정한 색을 나타나게 하였습니다. 예제는 본문의 "12. [요청사항] 구글어스에서만, ..."에 올려 놓았습니다.
3. 첫번째 질의 내용 中 캐드상의 '블록형태로 가져오기'는 어떤 의미인지 몰라 답변을 드리지 못하겠네요. 캐드 上의 블록이라면, explode 하기 전에는, 카카오맵이나 구글어스에서 표현이 안됩니다. 캐드 블록의 경우 Image 형태로 얼금설금 비슷하게 표현하거나, 아니면, 코드가 엄청 복잡하여 몇 개월이 걸릴 것 같아 엄두가 안 나네요. 불편하시더라도 explode하여 사용하시길 권합니다.
4. 매크로 사용법이 복잡하거나, 자꾸 MsgBox로 물어 보면 짜증이 나게 되어서, 최대한 간단하게 코드를 작성하려고 합니다. 끝.
캐드2020버전은 안되는건가요?
답글삭제1. 엑셀에 포함된 VBA는 엑셀 프로그램에 포함되어 있으나, 엑셀에 종속된 프로그램이 아니라, 별개의 프로그램으로 보시면 됩니다. 이런 이치로 엑셀 등 오피스, 오토캐드, ARC GIS 등에 포함된 VBA는 서로 연동됩니다. 그러므로 오토캐드 버젼이나 엑셀 버젼과는 상관 없습니다.
답글삭제2. 블로그 본문 3.설정 (2)를 참조해 주세요. 메뉴 도구-참조에서 캐드 2020 참조 라이브러리에 체크해 주세요. 엑셀 VBA와 캐드 VBA를 연결하는 과정입니다. 저는 상위 버젼 캐드가 없어 확인은 못 하지만, 당연히 됩니다. 답변이 되는지요? 끝.
안녕하세요
답글삭제그동안 너무 잘 사용하고 있었습니다 정말 감사합니다.
저번주까지만 해도 잘 사용하고 있었는데 오늘 전에 만들어 놓은 파일을 실행을 시켜도, 새로 만들어도 화면이 나오지를 않습니다. 위에 적어주신 글을 보니까 정책이 바뀌면 안될수 있다고 나와있던데 정책이 바껴서 그런건가여?
jungho_82@nate.com로 답변주시면 감사하겠습니다.
ssampakplay님께서 알려 주셨는데, 카카오지도 API key 정책변경으로 카카오지도 실행이 안 되는 경우가 았는데, 블로그 본문 13. [변경사항] 2021.03.22 변경사항을 참조해 주세요. 끝.
삭제안녕하세요~ 잘 쓰고 있습니다
답글삭제혹시 CAD 좌표(TM) 말고 UTM 좌표로
Excel에서 카카오맵(HTML), 구글어스(KML), 생태자연도(.js)로 보내는 VBA
가 있는지 여쭤 봅니다
1. 안녕하십니까?
삭제2. UTM 좌표계의 내용을 읽어 보니, 우리나라는 UTM Zone(52N)에 해당하여, 경도 129˚, 위도 0˚, Scale factor 0.9996에 해당된다고 합니다. 타원체는 WGS84이므로, 위의 투영상수 3가지만 적용하면 세계측지계 투영도법과 같습니다.
3. 요즘 시간을 내기가 너무 어려워 코드 수정을 못하고 있습니다. 장담하기 어려운데, 이번 주말쯤은 시간을 내서 수정해 볼려고 합니다. 다음 주에 한 번 들러 주세요. 끝.
네 감사합니다~ 기다리겠습니다
삭제1. 안녕하십니까?
삭제2. 요청하신 사항은 블로거 본문 「14. [요청사항] "UTM 좌표로"」에 간략히 설명을 올렸습니다.
ⓘ UTM 좌표로 된 도면을 구하려 아무리 검색해도 구할 수가 없어서 UTM 좌표로 하는 것은 검증이 안되어, UTM-K 좌표 샘플을 인터넷에서 검색하여 "2021-01-15 글쓴이 김 형준
대한민국 최신 행정구역(SHP) 다운로드" 구하였습니다. 하여튼 UTM-K도 투영도법은 UTM이나, WTM이나 같으니, 투영상수만 다르게 적용하면 됩니다. 측지계 기준점을 필히 확인하셔야 합니다.
② UTM-K는 WGS84 타원체에 「경도 127.5˚, 위도 38˚, X축(N) 가산값 2,000,000m, Y축(E) 가산값 1,000,000m, 축척계수(Κ0) 0.9996」 상수를 적용하면 되어서, WTM과 같습니다.
③ UTM 좌표계나 UTM-K 좌표계로 된 대축척 지도가 있다면, 변환식이 맞는지 확인할 수 있을텐데 구할 수가 없네요.
④ 첨부파일의 VBA 코드를 수정하여 다시 링크하니, 다시 다운 받으시면 됩니다. 카카오지도와 구글어스 코드만 수정하였고, 생태자연도는 사용빈도가 없어 고치지 않았습니다. 끝.
안녕하세요, 너무 잘 쓰고 있습니다.
답글삭제혹시 좌표로 주소를 얻어내려고 밑에 넣는걸 확인 중인데,
어떻게 넣어야 할까요?
https://apis.map.kakao.com/web/sample/coord2addr/
1. 안녕하십니까?
삭제2. 질문하신 내용은 블로거 본문 '15. [질문사항] "좌표로 주소를 얻어내려고"'에 설명을 올렸습니다.
ⓘ 카카오에서 API 정책을 바꾸면서, 2021.03.22 이전에는 좌표주소 변환은 로컬에서 가능했는데, 이제는 웹서버를 통해야 하는 것 같습니다. 현재 로컬에서 좌표주소 변환 코드가 있는 HTML을 실행하면 주소변환 인포윈도우는 나타나지 않습니다.
② 좌표주소 변환은 웹서버에서 실행해야 해서 간단한 크롬 웹서버를 이용하는 방법을 본문에 기재하였습니다.
3. 질문하신 의미를 살펴 보면, 카카오맵의 Sample '좌표로 주소를 얻어내기'를 웹 상에서 하면 잘 되는데, 개인 PC에 저장해서 그대로 따라 해도 안 되어 답답하셨죠? 카카오맵의 샘플은 당연히 카카오뱀의 서버에서 구동되니 잘 되는 것이고, 시키는 대로 따라 해서 복사해서 개인 PC에 저장해서 하면 로컬이니 안되는 게 당연합니다. 전문가 그룹에 당한 것입니다.
4. 카카오 개발자 포럼에 질문을 올리려 해도 업계 사람들만 있는지 전부 전문용어라 당최 무슨 말인지 알아 들을 수 없어, 질의할 엄두가 나질 않더군요. '우짱'님께서도 관심을 가지고 계시니, REST API키를 로컬에서 사용할 수 있는 방법을 아시게 된다면 저에게도 알려 주세요. GET, 헤더 뭐 이런 말이 막 나와요. 끝.
안녕하세요. 잘 지내셨나요? 카카오맵 지적편집도가 활성되게 하려면 어디를 수정해야 하나요. mapTypeId: daum.maps.MapTypeId.USE_DISTRICT"
답글삭제이렇게 수정을했는데 맵이 보이지는 않습니다^^;
1. 안녕하십니까?
삭제2. 요청하신 내용 '카카오맵 지도타입 바꾸기'는 카카오맵 화면에 클릭 버튼을 추가하였습니다. 블로거 본문 「16. [요청사항] "카카오맵 지도타입 바꾸기"」를 참조해 주세요. 카카오맵 화면 아래 '지적편집도'를 클릭하면 지적편집도가 오버레이 되고, '지도타입 안보기'를 클릭하면 지도타입이 사라집니다.
3. 카카오맵 지도Type 선택버튼을 넣느라 공간이 없어, 모니터 세로화면은 100%에서 90% 줄이고, 남는 공간에 선택버튼을 넣었습니다. 지도 타입을 안 보고 싶으시면, 「지도타입 안보기」를 클릭하세요. 고친 엑셀파일은 블로거 본문에서 링크로 다시 다운 받으세요.
4. 지적도는 너무 어렵습니다. 짐작하기로는, 지적측량기준점 자체가 불규칙적인 오차가 누적되어 있고, 일제시대 작성된 종이도면을 광복후 전쟁으로 재작성하였고, 그 종이도면을 기준으로 전산화하여, 각 도엽마다 오차가 우발적이고, 개인의 재산권과 직결된 문제라 쉽지 않을거라 생각됩니다.
5. 지적도에 대해 정확히 알지도 못하는데, 함부로 말씀드릴 수가 없어 설명이 부족합니다. 끝.
안녕하세요. 엑셀상에서 1그룹 2그룹 3그룹 다 폴리라인으로 설정해놓고 색도 캐드로 설정한다음 카카오맵으로 돌리는 중인데, 다른 응용프로그램의 OLE작업이 끝나길 기다리고 있습니다. 창이 계쏙 뜹니다. 확인 을 눌러도 30분째 반복되고 있습니다. 계속 기달려야하는건지, 오류가 있는건지 몰라 연락드립니다.
답글삭제도면에 있는 텍스트를 다음지도에 넣을려고하면 2 그룹에서 text(속성클릭하고) 지도 실행버튼 눌렀는데 텍스트 대신 원이 지도상에 표시됐는데,, 이건 어떻게 수정해야하나여?
삭제1. 카카오지도에 텍스트를 넣는 방법은 인포윈도우인데, 인포윈도우가 따라 다녀 지저분합니다. 윈이 지도상에 표시된다니, Text(속성클릭)을 선택하신 것 같은데, 마우스로 원을 클릭하면 Text가 나타납니다.
삭제2. 아니면, Text(인포윈도우)를 선택하면, 텍스트가 카카오지도에 인포윈도우가 나타납니다.
1. 안녕하십니까?
답글삭제2. 'OLE...'가 나온다면, 아직 선택을 다 하지 않은 것입니다. 캐드에서 마우스로 선택하고 엔터를 쳐야만 합니다. 그리고, 제2그룹 선택하고 엔터, 제3그룹 선택하고 엔터쳐야 합니다. 그냥 1그룹만 선택하고 먼저 해 보시죠.
3. 아니면, 캐드에서 엑셀로 화면 전환이 안되는 것이니, 화면 하단에 직접 엑셀창을 클릭하여 확인을 눌러 주세요.
님 정말 대단하신것 같습니다.(능력자이심~)
답글삭제이제서야 이런 프로그램을 접하게 된게 한탄 스럽네요..^^
프로그램 오류인지 저만 그런건지..
클릭이벤트 없이 폴리곤(Polygon) 선택시 오류가 나네요..
로드뷰 없는 버전에서는 잘된것 같은데..확인 부탁드려도 될까요?
1. 안녕하세요?
삭제2. 저도 클릭이벤트 없이 해 보니 에러가 나네요. 코드를 필요에 따라 계속 추가하였기에 에러를 발견할 수 없었습니다.
에러 원인은 이 코드 때문인데,
「 If Not acad.ActiveDocument.SelectionSets("TEMP") Is Nothing Then acad.ActiveDocument.SelectionSets("TEMP").Delete」
캐드의 SelectionSets의 내용을 지우는 코드인데,
왜 필요한지 기억이 안나네요. 필요없는 것 같기도 하고, 필요하니깐 넣은 것 같기도 합니다.
그래서, 이 코드 앞뒤로,
On Error Resume Next => 에러가 나도 계속 진행
If Not acad.ActiveDocument.SelectionSets("TEMP") Is Nothing Then acad.ActiveDocument.SelectionSets("TEMP").Delete
On Error GoTo 0 => On Error Resume Next 명령 취소
추가하여 일단 에러가 나도 다음으로 진행시키게 했습니다.
3. VBA 코드를 수정한 다음 다시 게시하였습니다. 다시 다운 받으시면 됩니다. 끝.
빠른 피드백 감사합니다.^^
삭제정말 감사하게 잘 사용하고 있습니다.
답글삭제다름이 아니라 송구스럽게도 문의 드릴께 있어 질문을 드립니다.
새로운 컴퓨터를 구매해서 이용하려고하니
"캐드도면을 열어놓고 시작해야 합니다" 메세지와 함께 실행을 멈춥니다.
위 내용에 서술해주신 것처럼 참조에 추가하고,매크로 허용하였습니다.
댓글을 읽어보니 해당 버전의VBA모듈이 있어야 한다고 해서 설치를 해도 위 메세지가 나옵니다.
혹시 몰라 관리자 권한을 줘도 더이상 진행을 할수가 없네요.
(전 pc는 windows7 SP3+ office 2010 + AutoCAD Map 3D 2008 위 사양으로 잘 이용하였습니다.)
현재 사용하려고 하는 사양은 아래와 같습니다.
운영체제 - Windows10 21H2
엑셀 - office 365
캐드 - AutoCAD Map 3D 2018
다시 한번 수고스럽게 해드려 죄송합니다.
혹시 글 내용상 실수한 점이나, 지나친 내용이 있다면 답변 부탁드리겠습니다.
감사합니다.
1. 안녕하십니까?
삭제2. "캐드도면을 열어놓고 시작해야 합니다"는 캐드도면이 열려 있나 확인할려고, 코드에 메시지 박스를 넣은 것입니다.
VBA 코드 : MsgBox "캐드도면을 열어놓고 시작해야 합니다. 실행을 중지합니다."
그러므로, 캐드가 열려 있지 않다면, 확인을 클릭하면 VBA 코드가 종료(Exit Sub) 됩니다.
이 메시지가 나온다면 VB 코드는 정상적으로 작동한다는 얘기인데,
3. 캐드가 열려 있지 않아 종료되는데, 다른 경우라면 캐드가 열려 있는데도 열려 있다고 인식을 못한다는 얘기인데 어떤 경우인지는 모르겠습니다.
엑셀과 캐드와의 조합이므로, 운영체제는 상관없고, 엑셀 버전도 상관없고, 관리자 권한도 필요 없습니다. VB는 엑셀에 포함되어 있지만, 별개의 프로그램입니다.
① 캐드도면이 열린상태에서 이 메시지가 나오고 종료되는지요?
② 캐드도면이 열려 있다면, 그 다음에서 에러가 날텐데, 캐드에도 VBA가 설치되어 있는지요? 기본으로 포함되어 있습니다만, 없다고 해도 그 다음에서 에러가 날텐데, 참고로 여쭤 봅니다.
그래서, 그 다음에 고민해 보겠습니다. 끝.
답글이 늦어 죄송합니다.
삭제구현 했을때 상황이 캐드와 엑셀이 둘다 실행되고 있었습니다.
(캐드를 먼저 실행 후 엑셀을 실행해보기도 했으며, 엑셀을 실행 후
캐드를 실행하는 실행의 순서를 바꿔보기도 하였습니다.)
"캐드도면을 열어놓고 시작해야 합니다. 실행을 중지합니다." 라는 메세지가 나오고, 단지 확인 버튼을 누르게 되는 상황입니다.
일단 특정 프로그램과의 충돌이나, 기타 변수로가 혹시나 영향을 주는지 다른 컴퓨터(windows10 21H2, AutoCAD Map 3D 2018, msoffice 2019) 에서 실행을 해도 위와 같은 상황이였습니다.
VBA는 캐드버전에 맞는 버전으로 추가 설치하였습니다.
더 자세하게 설명 드리고 싶은데 말 주변이 없어 어렵네요.죄송합니다.
다시 한번 신경 써주셔서 감사드립니다.
1. 정말 어렵네요. 잘 모르겠습니다.
삭제2. 블로거 본문 "19. [오류찾기] ProgID때문에 오류 찾기 중입니다. 다른 분들은 다운로드 하지 마세요.
20220225_ProgID때문에.xlsm" 에서 다운로드 받아 한번 실행해 보시고 다시 연락주세요.
3. CAD 버전이 2018이니, Set acad = GetObject(, "AutoCAD.Application")을 Set acad = GetObject(, "AutoCAD.Application.22")로 바꿨습니다. 원래 캐드 버전과는 상관없는데, 일단 시험해 보고 다른 방법을 찾아야 할 것 같습니다. 끝.
정말 감사합니다.
삭제요청하신 내용처럼 "20220225_ProgID때문에.xlsm" 다운로드하여 실행을 하였더니 이상없이 동작을 합니다.
귀찮으셨을텐데 신경써주셔서 다시 한번 감사드립니다.
(혹시 다른것 테스트 하실꺼 있으시면 말씀해 주세요. 최대한 빨리 실행해보고 결과 전달하겠습니다.)
1. 정말,정말 어렵네요.
삭제좋은 지적해 주셔서 감사합니다. 몰랐던 부분을 알게 되었습니다.
앞으로도 계속 문제가 발생할 것 같은데, 피드백을 해 주신다면 감사하겠습니다.
2. 다온맵님의 새 PC는 Windows10 21H2(64bit)이니, 기본적으로 Office365나 MSoffice 2019의 엑셀은 Excel 64bit 버전이 설치된 것 같습니다. Excel에 내장된 VBA는 Excel 64bit 버전은 VBA7이 내장되어 있다고 합니다.
① 다온맵님의 'AutoCAD Map 3D 2018'은 32bit인지 64bit인지요?
엑셀, 캐드가 다 같이 64bit 버전인데도, 인식을 못하는 지가 궁금합니다.
아니면, 'AutoCAD Map 3D 2018'은 32bit 버전으로 설치하셨는지요?
② 기술이 발전하면서, Kakao도 그렇고, MS도 그렇게 자꾸 환경이 바뀌네요. 32bit VBA6는 C:\Windows\System32를 참조하는데, 64bit VBA7은 C:\Windows\Syswow64를 참조하는 것 같습니다. 그래서 참조 폴더가 바뀌고, CAD의 경우 버전 독립 ProgID를 못 찾으니, 버전 종속 ProgID를 지정해야 하는 것 같습니다. 잘 알지를 못해 "같습니다"라는 말을 자꾸 써서 답답합니다.
3. 하여튼, 제가 생각하기로는 해결방법은
① 레지스트리를 바꾸는 방법 → 될 것 같은데, 쓰시는 분들은 복잡해서 짜증나시겠죠. 차라리 안쓸 것 같습니다.
② CAD 버전별로 종속 ProgID를 전부 지정하는 방법 → code가 너저분해지고, 현재까지는 괜찮지만 앞으로 나올 캐드 버전 number까지 예상해서 넣어야 하겠죠. 가장 쉬운 방법이지만, 다른 방법을 찾고 싶습니다.
③ 지금 PC에서 실행중인 CAD 버전을 읽어 들여 변수로 지정하는 방법 → 역시 코드가 너저분해지고, 예전 DOS Basic 수준으로 코딩하는 수준인데, 가능할 지 모르겠습니다.
4. 제가 몰랐던 부분은 운영체제가 64bit로 바뀌면서 Excel VBA 환경도 바꼈다는 사실입니다.
□ 다온맵님의 PC 환경이, 엑셀과 캐드가 각각 32bit인지 64bit인지 알려 주시면 해결방법을 찾는데 범위가 좁아 질 것 같습니다. 댓글 남겨 주셔서 감사합니다. 그리고, 피드백 부탁 드립니다. 끝.
신경써주셔서 감사합니다.
삭제* 버전은
Windows10 - 64bit
Office - 64bit
Autocad - 64bit
위와 같은 환경입니다.
도움이 드리고 싶은데 이게 한계네요...
1. 제 질문에 확인해 주셔서 감사합니다.
삭제2. 저도 잘 모르고 질문했습니다. 윈도 64bit에서는 cad 2018버전은 64bit 밖에 안된다는 사실도 몰랐습니다.
3. 인터넷에 찾아 보니 Inherited Permissions(권한 상속) 문제라고 하는데, 폴더 설정값을 바꿔야 하는 것 같아, 사례를 직접 보지 않고는 함부로 말씀드리기 어렵습니다. 아쉽지만 제게 비슷한 경우를 보게 되면, 직접 실행해 보고 해결방법을 게시하겠습니다. 끝.
안녕하세요~
답글삭제1. 폴리곤이 다중 선택이 안되는데(이전버전에서는 가능했었든기억이..)
제한을 한것인지 오류인지요?
2.염치 없지만, 그룹을 추가 할수는 없는지 궁금합니다.
1. 안녕하십니까?
삭제2. 폴리곤이 다중 선택이 안되는데...
① 코딩 에러가 맞습니다. 구문이 왜 틀렸는지, 이제 변수명이 무얼 의미하는지도 모르겠습니다.
② 에러 구문을 회피하는 코드를 추가 하였습니다. 안 된다면 다시 연락 주세요.
3. 그룹을 추가 할 수는 없는지...
① 캐드 객체 종류가 3가지를 초과하여 선택하시려는 것 같은데, 종류가 많아 "내가 뭘 선택해야지?" 하면서 순서를 잊어 버릴 것 같습니다.
② 하여튼 10개 종류까지 선택할 수 있게 바꾸었습니다. sheet '영은'의 B103셀 ~ B115셀 까지에서 그릴 선종류를 선택하시면 됩니다. '선택안함'으로 설정하면 실행이 안되므로 필요한 횟수만큼 선택하시면 됩니다. 기본값으로 '선택안함'으로 채워 넣었습니다.
③ 구글어스는 잘 안 써서 안 고쳤습니다. 어차피 코딩도 하다 말아서 객체종류도 몇개 없습니다.
4. 링크된 파일을 다시 다운로드 받으세요. 끝.
감사한 마음으로 잘 쓰겠습니다..
삭제고맙습니다.^^
안녕하세요 정말 유용한정보 잘 활용하고 있습니다. 한가지 궁금한사항이있어서 질문드립니다. 스마트폰에서 웹브라우저 창에 "file:///sdcard/download 입력후 파일을 찾아 열면 현재 위치표기가 실행되는데. 갤럭시 탭에서 하면 파일을 찾을수없고 보이지도 않더라구요.ㅠㅜ 혹시 해결방법이 있을까요?
답글삭제1. 안녕하십니까?
삭제2. 갤럭시탭을 안 써서 사양을 몰라 어떤지 모르겠습니다. GPS가 있다면 표시될텐데, 없으면 인터넷 접속위치에 마크가 표시되므로, 갤럭시탭의 위치 반경 몇 Km 내에서 찾아 보세요. 지도의 이쪽 저쪽을 주의깊게 살펴보면 마크가 고정되어 있을 겁니다.
3. GPS 기능이 켜져 있지 않다면, 실제 위치를 나타내는 게 아니라서 위치표시가 별 의미가 없습니다. 끝.
안녕하세요 글 잘보고있습니다 감사합니다
답글삭제캐드상에서 도로선형이 폴리선으로 되어있는대 구글어스 변환시 적용이안됩니다 ㅠㅠ어떻게설덩해야까요?
1. 안녕하십니까?
삭제2. 아마, 캐드 상의 폴리선이 2D 폴리라인일 겁니다.
① 도로선형의 폴리선을 선책해서, 캐드 명령어 "converpoly"로 폴리라인(lwpolyline)으로 변환시킨 後 하시면 됩니다.
② 또는 2D(polyline) or 3D 폴리라인을 그대로 선택하고자 하시면 code를 추가해야 하는데, 선택사항이 자꾸 많아져서 엑셀화면이 복잡해져서 캐드 명령어 convertpoly로 변환하시는 게 나을 듯 합니다.
3. 특별한 경우로 이런 도면이 무지 많다면 다시 연락 주십시요. code를 바꾸겠습니다.
4. 제 블로거에 방문해 주셔서 감사합니다. 끝.
안녕하십니까 너무도 유용하게 사용하고있습니다
답글삭제무한감사 드림니다
다름이 아니라 현장에서 스마트폰으로 사용시 현위치
사용기능이 있엇으면 좋겠다는 생각이 들어 이렇게
올림니다 가능하시다면 수정버전을 정중히 부탁드립니다.
1. 안녕하십니까?
삭제2. 카카오지도를 예로 들면, 엑셀화면에서 "E9" 셀의 값을 "위치추적기 아이콘(마크만)"을 선택하시고 실행하시면 네비게이터가 활성화 됩니다. 스마트폰에서는 블로거 본문 6.⑤에 서술한 것처럼 하셔야 합니다. 안드로이드 보안때문에 "content://~ "에서는 네비게이터가 켜지질 않습니다.
현재위치 표시 아이콘은 임의로 빨간색 삼각형 2개를 붙인(일명 제수변 마크) 아이콘이 표시됩니다. 따로 필요하다면, 아이콘은 마음에 드는 걸로 만들어 이미지 주소만 연결하시면 됩니다.
구글어스앱은 제 스마트폰에서는 설치가 안되어서, 확인이 안되는데, 기본값으로 될 것 같습니다.
3. 현재위치 표시의 기능은, 스마트폰의 GPS칩이 GPS측량기보다 성능이 떨어지는 것도 있지만, 근본적인 오차의 원인은, 위성에서 스마트폰까지 신호가 오면서, 하늘에서 전리층, 대류층의 굴절오차가 제일 크고, 기타 오차들이 있습니다. 탁 트인 야외에서는 몇 m의 오차가, 복잡한 지형에서는 몇 십m의 오차가 납니다.
GPS 측량기도 전리층, 대류층 오차는 마찬가지입니다. 단지 OSR 보정신호를 따로 수신하여 오차를 보정하기 때문에 몇 cm이내의 오차범위 안에 들 수 있습니다.
국토지리정보원에서 따로 단방향 SSR 신호도 보내 준다고 하는데, 아무리 봐도 어떻게 하는지 잘 모르겠습니다.
이번에 GPS 보정용 위성도 쏘았다고 하니, 내년을 기대해 봅니다. 끝.
안드로이드 정책으로 핸드폰에서 첨부된 문서를 찾을수 없다면 현재 사용하시는 폰의 안드로이드버전이 높으셔서 안되는것이고 구버전의 안드로이드폰을 사용하시면 본문에서 언급하신 내용으로 파일을 찾아서 실행하시면 현위치가 나타납니다.
삭제1. 안녕하십니까?
답글삭제2. "ssampakplayer"님의 말씀을 이제야 이해했습니다.
카카오지도 Map API 샘플을 보니 "선의 거리 계산하기" 샘플이 있네요. 이 코드를 포함시켜 달라는 의미이신 것 같습니다.
3. 코드를 그대로 복사하여 붙여 넣기 하면 될 것 같습니다. 주말에 해서 다시 게시하겠습니다. 끝.
1. 안녕하십니까?
답글삭제2. 블로거 본문 21. [요청사항] '선의 거리 계산하기' 코드 추가. 2022.10.12(수) 수정사항.에 수정사항을 올렸습니다.
① Kakao Maps API의 「선의 거리 계산하기」 샘플 code를 복사, 붙여넣기 하여 '선의 거리'를 지도에 나타내는 코드를 추가 하였습니다. "도보, 자전거 소요시간"은 필요 없을 것 같아 삭제하였습니다.
② Kakao Maps API의 샘플과 같이 "지도를 마우스로 클릭하면 선 그리기가 시작되고, 오른쪽 마우스를 클릭하면 선 그리기가 종료됩니다."
③ 지도 하단의 「선의 거리 계산하기」 button을 클릭하여야 실행됩니다. 일단 「선의 거리 계산하기」 코드가 실행되면 취소할 수는 없습니다. 자바스크립트에 대한 이해가 부족해 취소 코드를 찾지 못했습니다. 끝.
안녕하십니까
답글삭제아주 유용하게 사용하고 있어서
많은 감사 드림니다
지리정보원 수치지도를 다운받아 사용하는데 수치지도는
3D폴리선으로 제작되어있어서 사용이 조금 불편한데요
3D폴리선 도 선택할수 있도록 해주시면 감사하겠습니다.
작성자가 댓글을 삭제했습니다.
삭제1. 블로거 본문 "23. 2023.01.15(일) 요청사항. 폴리라인은 lwpolyline (ObjectName은 "AcDbPolyline"), polyline (ObjectName은 "AcDb2dPolyline","AcDb3dPolyline") 두 가지 모두 같이 선택되게 했다. 카카오맵이나 구글어스에서 두 종류의 폴리라인 표현은 구분없이 평면상으로 polyline으로 같게 표현한다."을 참조해 주시고,
삭제2. 엑셀파일은 다시 다운받아 주세요. 끝.
작성자가 댓글을 삭제했습니다.
답글삭제첨부해주신 엑셀파일 잘 사용중에 있기에 정말 감사드립니다.
답글삭제캐드문자에 대한 불편함이 있어 m0used 님이 만들어주신 리습을 이용해서 html 짜집기를 통해 글자까지 올리고 있는데, 혹시 코드추가가 가능할련지??? ^^;;; 도움 부탁드립니다.
소스추가가 안되어 블로그 주소 남겨드립니다.
https://faithkoo.tistory.com/3
원본소스주소 https://blog.naver.com/m0useb/222288916298
1. 캐드에 있는 문자(TEXT)를 좌표 그대로 카카오지도에 나타내고자 하신다는 말씀이죠? 카카오지도 API를 읽어 봐야겠지만, 문자의 크기, 회전은 아마 안 될겁니다.
삭제2. 주중에는 시간이 없어 주말에 수정하여 게시하도록 해보겠습니다. 끝.
1. 블로거 본문 "24. 2023.03.19(일) 요청사항."에 내용을 올리고, 첨부파일 업데이트 하였습니다. 다시 다운 받으시면 될겁니다.
삭제2. 문자크기 조절은 되는데, 문자회전은 안되는 것 같습니다. 끝.
제 의견을 반영해 주셔서 정말 감사드립니다. 아직 문자적용에 대해서 어떨때는 문자가 선택되어 보이고 어떨때는 안보일때도 있어서 이건 이것저것 테스트해봐야겠네요~ 정말 감사드립니다.~
삭제몇가지 안되는게 있는데 이건 사용자가 캐드를 일일히 수정해서 사용하면 될듯합니다.
삭제1.글자 중에 ' 이거 들어간 글자(예시 : con'c) 가 선택되면 카카오지도로 출력이 안되는점이 있네요
2. 여러줄문자(mtext)로 작성된 글자는 출력이 안되어 문자(text)로 explode해서 사용해야 합니다.
1. "아이쿠"님의 답글을 보고, 작은따옴표(')가 들어간 문자 한개만 실행 봤습니다. 그랬더니, Error가 나네요. "아이쿠"님의 답글로 또 다른 '에러'가 있는 것을 알았습니다. 코드를 수정하면서 Error를 피할려고 다음과 같은 코드를 추가한 것이 쓸데 없는 짓이었는데, 미쳐 몰랐습니다.
삭제「If acad.ActiveDocument.SelectionSets("TEMP") Then acad.ActiveDocument.SelectionSets("TEMP").Delete ← 왜 이 코드를 넣었을까? 'SelectionSets 때문에넣었는데, 이것 때문에 Error가 나므로, 선택한 문자들에서 첫번째 문자는 Err.Clear로 건너띄게 된다.」
2. "아이쿠"님의 말씀대로, ACAD 도면의 문자에서 작은 따옴표(')가 들어간 문자는 Error가 납니다. JavaScript 언어를 몰라 알아 차리지도 못했습니다. 도면에서 작은따옴표(')는 무시할 수 없을만큼 많이 나오기에 꼭 필요한 것 같습니다. 자바스크립트 문서를 읽어 보니 근본적인 해결은, 지금 수준에서 어려울 것 같습니다.
그래서, 작은따옴표('), 큰따옴표("), back-tick(`) 중에서 하나는 포기해야 할 것 같습니다. 잘 안쓰는 문자 back-tick(`)이 캐드상의 문자로 포함되면 Error가 납니다.
3. 여러줄문자(mtext)작성된 글자도 자주 나오므로 표현하면 좋을 것 같습니다만, 여러 제약 조건이 있습니다. 일단 dtext나 mtext 모두 선택하여 실행되게 수정하였습나,
① ACAD에서의 mtext는 줄 바꿈이 되나, 카카오지도에서는 한 줄로 표현됩니다. VBA에서 ACAD의 mtext를 읽으면 줄바꿈 기호가 "\P"로 표현되고, 카카오지도에서는 "P"로 표현됩니다. 카카오지도에서 줄바꿈을 할려면 자바스크립트에서 "
"이 필요한데, 지금 제 수준에서는 안됩니다.
② 제가 임의로 이름을 붙여, 보통 C:\temp에 생성된, "20210127_kakaomap_Google earth_생태자연도.htm" 파일을 메모장에서 열어, 찾기바꾸기로 "\P" → "
"로 바꾸시면 줄바꿈된 Mtext를 카카오지도에 나태낼 수 있습니다.
4. 이 프로그램이 어떤 소용이 되신다면, 에러를 발견하실 때 연락주시면 감사하겠습니다. 끝.
답변 달아주셔서 매우 감사감사 드립니다. *^^*
삭제선의 길이 측정하기 없애는 편법인거 같은데.....
답글삭제맞는지 모르겠네요 ^^;
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb88orO%2Fbtr8GlC13H8%2FYbZHk8TKs9LsHNWVIh4lfK%2Fimg.png
1. 안녕하십니까?
삭제말씀하신 내용과 약간 다른 의미로, 프로그래밍 언어의 구조를 몰라 「선의 거리 계산하기」 코드를 실행한 뒤 취소하는 방법을 찾지 못했습니다.
2. HTML문서를 연 다음, 화면상에 클릭하여도 아무 반응이 없다가, 「선의 거리 계산하기」 button을 클릭하면,
「선의 거리 계산하기」 코드가 실행됩니다. 일단 실행되면, 화면상에 클릭할 때마다 「선의 거리 계산하기」 코드가 실행됩니다.
3. 「선의 거리 계산하기」 코드는 좌클릭 + 좌클릭 ... + 우클릭 해야 계산이 되는데, 좌클릭 + 우클릭 하면 계산 할 것이 없어 화면상에 아무 것도 나타나지 않는 것 뿐입니다.
4. 취소하는 또 다른 버튼(취소하는 Button 추가)을 만들든지, 조건문으로 해제해야(EX.우클릭 2번이면 code 취소) 하는데, 제 수준에서는 CODE가 너무 어렵습니다. 그래서, 말씀처럼 좌클릭+우클릭 하여 화면상에서 지우고, 그냥 쓰야할 것 같습니다. 끝.
안녕하세요~
답글삭제지도의 확대가 제한적이든데, 더 확대를 할수는 없나요?
카카오지도는 Kakao Maps API에 기술된 바와 같이 "지도 레벨은 1부터 14레벨이 있으며 숫자가 작을수록 지도 확대 수준이 높습니다"이어서 레벨 1이 최대 확대입니다. 더 이상 확대할 수 없습니다.
삭제구글어스는 제한없이 확대되나, 해상도가 낮아서 확대해도 픽셀수준에서 끝나 큰 의미가 없습니다. 끝.
감사합니다.
삭제PC에서 확대레벨과 모바일 확대레벨이 달라 문의드렸습니다.
TEMP 폴더에 생성된 html파일을 에디터 프로그램으로 열어보면 50열쯤에 level:3, // 지도의 확대레벨 이라고 적혀있습니다. 숫자 3을 숫자1로 수정 후 저장하시면 모바일에서 조금이나마 더 자세히 보실수 있습니다.
삭제안녕하세요...지금까지 너무나도 잘 사용하구 있는 유저입니다.
답글삭제다른게 아니구 좌표로 주소를 추출하는 과정에 있는 웹서버 크롬"- "Web Server for Chrome"이란 앱이 크롬에서 사용이 중지당했습니다. 너무나도 잘 쓰고 있었는데...지금은 사용할수가 없네요.. 다른 방법은 없는건가요?
1. 카카오지도의 주소 변환 API는 웹서버에서 작동하기에, 대표적으로 "웹서버 크롬"을 예시로 들었습니다. 웹서버 크롬 말고 다른 웹서버를 사용하면 되는데, 다른 웹서버를 구축해 보려 하였으나, 과정이 어려워서 잘 안되네요. IT분야에 있는 분들은 금방 할텐데...
삭제2. 그리고, 이번에 물어 보셔서, "좌표로 주소 추출" CODE를 실행시켜 봤는데, 계속 에러가 나네요. 이것저것 고치면서 뭔가 잘못한 것 같습니다. 여기부터 막힙니다. 뭐가 문제인지 모르니, 뭘 고쳐야 하는지 모르겠습니다.
3. 어디서 잘못했는지 부터 찾아야 하고, 다른 방법이 있는지, 접근 방법을 근본적으로 바꿔야 할 것 같습니다. 시간이 많이 걸릴 것 같습니다. 끝.
신경써주셔서 감사합니다..
삭제1. "스페이스"님이 말씀하신, 「크롬에서 "Web Server for Chrome" 앱 사용중지에 따른 대체 웹서버」를 찾아 보았습니다. 그래서, 다른 간단한 방법을 찾아 보니, "python으로 웹서버 실행」하는 방법이 있습니다.
삭제2. 블로거 본문 25. 항목을 참조해 주세요.
안녕하세요 업무에 유용히 활용하고 있는 일인입니다~ 몇가지만 요청드려도 될까요? ^^ 너무 좋은 기능들이 많지만 염치없지만 가능하다면 다음 기능도 부탁드립니다~!
답글삭제1. "지적편집도"를 카카오맵에서 누르면 "농림지역, 계획관리지역" 이렇게 구분이 뜨는데, 혹시 지적선 및 지번이 나오는 탭을 하나더 추가해 주실수 있나요?
2. 카카오맵의 경우 기존에 만든 HTML에 객체를 추가하는 기능이 있었으면 합니다. 현재는 객체를 추가하고자 할때 새로 만들어야 하는데 이 기능이 추가될 경우 기존파일을 활용해 수정가능 할 것 같습니다.
3. 혹시 PC에서 만든 HTML을 IOS에서는 확인이 불가능할까요? 현장조사시에도 활용하면 좋을것 같은데,,, 외부에선 보통 태블릿이나 핸드폰으로 활용해야하는데 가능한지 궁금합니다.
안녕하십니까?
삭제1. "지적편집도"는 확인해 보니, level 1부터 나타나는데, level 2까지는 지적선과 지번이 표시되고, level 3 부터는 용도지역 等이 표시되네요. 스카이뷰는 level 0부터 시작하니, 1단계 축소하여 level 1에서 보시면 됩니다.
2. HTML 문서(.htm)는 텍스트이므로, 메모장, 노트패드, Excel, 아래한글 등으로 편집할 수 있습니다. 그런데, '객체 추가'란 기존 만들어진 .htm 파일을 편집하여 추가하는 것을 말씀하시는 것 같은데, 어렵습니다.
개별 컴퓨터의 .htm 파일의 저장 위치, 파일이름, 수정유무 등을 판단하기 어렵기 때문에, code를 메모장 등으로 직접 편집하셔야 합니다.
새로 만들어진 HTML 파일을 메모장 등으로 여셔서 자세히 보면, 필요코드를 찾으실 수 있습니다. 복사하여 기존의 HTML 파일에 추가하여 저장하시면 됩니다.
3. 아이폰이나 아이패드를 써 본 적이 없으나, 애플도 WEB 표준을 따르니, 아이폰에도 복사하여 실행하면 될 것 같습니다. 끝.
항상 자료에 감사를 드리며 다음과 같은 현상이 나타나서 문의드립니다.
답글삭제1. line을 선택해도 카카오맵에 표시가 안되는 현상이며,
line을 선택해서 구글어스를 선택하면 5번째 줄, 2열에서 구문분석 오류가 발생했습니다. mismatched tag 라고 오류메세지를 띄우며 구글어스에서 보여주질 않네요
문제되는 캐드파일을 보내드렸으면 하는데... 어디로 보내야 할지 모르겠습니다. ^^;;;
1. 네, 메일은 ljdkej@gmail.com(영어 소문자로 "엘 제이 디 케이 이 제이" 입니다.)으로 보내주세요. 끝.
삭제2. 저도 똑같이 해 보니 에러가 납니다. 반복되는 에러코드에서 대표적으로 「var content = 'Layer : 도로(CON'C)'+'
삭제' + '길이 10.37m' ;」에서 에러가 납니다. 카카오지도 클릭이벤트여부(캐드레이어명을 읽는다)를 선택하면 캐드도면의 레이어명을 읽어 오는데,
레이어 「구조물(con'c)」 와 「도로(CON'C)」 에서 레이어 이름에 작은따옴표( ' )가 들어 있어 자바스크립트에서 에러가 납니다. 문자열에 대해서는 '(작은 따음표), "(큰따옴표), `(백 틱) 을 섞어 에러를 회피할 수 있는데, 코드 수정할 여유가 없네요.
임시로 레이어명을 「구조물(concrete)」 와 「도로(CONCRETE)」와 같이 변경하여 사용해 주는 방법과, 엑셀 G9셀에서 「클릭이벤트여부(클릭이벤트 없는데 낫다)」를 선택하여 클릭이벤트를 없애는 방법이 있습니다. 끝.
넵 바쁘실텐데 답글 및 해결방안을 찾아주셔서 감사합니다. ~~~ 인사 꾸벅!!!!!
삭제ZWCAD용 엑셀파일 다운로드 시 링크로 넘어가서 다운로드가 안되는데, 개인 메일로 받아 볼 수 있을까요? pcw1568@naver.com입니다
답글삭제1. 안녕하십니까?
삭제2. 다운로드가 안되는지는 몰랐습니다. 메일에 파일로 첨부합니다. 메일이 오지 않았다면, 스팸메일로 분류되어 스팸메일함으로 갔을 겁니다. 끝.
노고가 많으십니다..사용해보려고 노력중입니다.
답글삭제2019버전 엑셀2016버전 사용중이고..
엑셀 열어서 카카오맵 선종류와선택회수를 선택.클릭 누르면 캐드 선 선택까지 가능합니다. 하지만 선을 선택하고 기다리면 '1004' 런타임 오류가 발생하였습니다
'saveAs' 메서드('_Workbook' 개체의)에서 오류가 발생하였습니다. 라고 뜹니다.. 해결방법 도움얻고자 합니다..
구글어스를 누르면 캐드 클릭은 못하고
'76'런타임 오류가 발생하였습니다:경로를 찾을 수 없습니다. 라고 뜹니다.. 해결방법 부탁드립니다..
1. 안녕하십니까?
삭제2. 카카오지도는 C:\Temp 폴더에 "20210127_kakaomap_Google earth_생태자연도.htm"을,
구글어스는 C:\Temp 폴더에 "20210127_kakaomap_Google earth_생태자연도.kml" 파일을 생성하여 저정한 다음 실행시키게 되어 있습니다.
'saveAs' 메서드('_... 오류는 저장오류입니다. 아마 미어캣님의 PC에 "C:\Temp" 폴더가 없거나, 폴더가 읽기전용으로 설정되어 있는 것 같습니다. 폴더가 없다면 "Temp" 만드시면 됩니다. 아니면, 코드를 수정하여 다른 경로를 지정하셔도 됩니다.
3. htm 파일이나 kml 파일을 어딘가에는 저장해야 해서, 대부분 PC의 C:\ 드라이브에 존재하는 Temp 폴더에 저장하는 것으로 했으며, 파일 이름도 확장자만 다르고, 이름은 엑셀파일과 동일하게 "C:\Temp"에 저장되도록 했습니다. 끝.
캐드 버전문의드립니다.. 2017LT버전으로 사용하려 하는데, LT버전은 작동이 되지 않는듯 해서 질문 드립니다.. 항상감사합니다
삭제1. 안녕하십니까?
삭제2. "LT버전은 작동하지 않는 듯 해서" 라고 하셨는데, 감이 오질 않습니다. 어떤 현상인지 조금 상세히 말씀해 주세요. 실행 절차라든지, 실행 결과, 에러코드 등을 추가해 주시면 원인을 찾아 보겠습니다. 끝.
안녕하세요? 설계를 하는 사람들에게 아주 훌륭하고 중요한 자료를 만들어주셔서 감사합니다.
답글삭제다름이 아니라 오토캐드를 사용하다 대안 캐드인 브릭스 캐드를 사용하는데 위에 zwcad 처럼 따라하면 될 것 같아서 bricscad로 이름만 바꿔서 찾기로 변경 해보았는데 잘 안되어서 브릭스 캐드에서도 사용할 수 있는 방법이 있을까해서 염치불구하고 글남기게 되었습니다ㅠ.ㅠ
1. 안녕하십니까?
삭제2. Bricscad用 VBA코드를 수정하여 본문 게시글 28.에 게시하였습니다. 28.⑤ 다운로드 링크를 통해 엑셀파일을 받으실 수 있습니다.
3. 요약 내용은 ⓘ 캐드 프로그램 이름을 Autocad.Application → BricscadApp.AcadApplication 으로 바꿔야 하며, ② 엑셀파일명은 사용자의 실수를 방지하기 위해, 임의로 "20190711_kakaomap_Google earth_생태자연도.xls" 이런 식으로 VBA에서 제한해서 엑셀파일명이 다르면 실행이 안됩니다.
4. VBA 프로젝트에 암호설정을 해 놓지 않았기 때문에, 누구나 코드를 수정할 수 있는데,
저도 잘 모르겠는데, 익숙하지 않으신 분들은 바꾸기가 아주 어렵습니다. 끝.
이상 없이 잘 작동하고 있습니다. 정말 너무 감사합니다ㅠ.ㅠ
삭제프로그램을 활용하고 뭐가 문제인지 모르겠습니다. 지도 실행버튼 누르고 캐드 영역 선택하면 윈도우창이 뜨는데 흰색바탕으로 아무것도 표기가 안됩니다. 지도도, 라인도 표시가 아무것도 없는 빈페이지로 temp에 저장이 되는데 어떤게 문제인지 궁금합니다.
답글삭제1. Coding 오류인 것 같습니다. 우선 도면이 좌표대로 설정되어 있는지 확인하시고, 다음 어떤 종류의 객체를 선택하셨는지 다시 한 번 알려 주세요. 끝.
삭제1.좌표는 GPS측량 점과 도면과 동일하여 카카오지도하고도 같은 좌표계를 사용하는것 같습니다.
삭제2.라인은 폴리라인 두세개 시험삼아 선택했을때도 그렇고 여러개 선택하였을때도 역시 흰색 윈도우창만 뜹니다.
1. 박건호님 PC에 "C:\temp\20240329 Autocad용 kamap_Gmap_생태자연도.htm" 라고 파일이 생성돼 있을겁니다. 이 파일을 ljdkej@gmail.com 메일로 보내 주세요. 왜 그런지 추측이 안되어 htm 파일을 참조하고자 합니다.
삭제메일 송부했습니다.감사합니다.
삭제1. 논산 황화2리 마을이네요. 엑셀파일이 다릅니다. 예전 카카오지도에서 API 키를 바꾸어서, 변경 API 키로 적용한 엑셀파일이 있습니다.
삭제2. 블로거 본문 중간쯤 8. 첨부파일 "⑨ 20240329 Autocad용 kamap_Gmap_생태자연도.xlsm" ← 다운로드 할려면 링크 클릭을 다시 다운로드 받으세요.
3. 이번 기회에 기존 파일은 삭제하겠습니다. 끝.
새롭게 바뀐 Entity 다중 선택!! 쵝오!!!입니다.. 감사합니다!!
답글삭제google earth 버튼을 누르면 프로그램만 실행되고 객체 선택이 안됩니다.
답글삭제1. 구글어스는 수정하지 않아, 엑셀시트 B14셀에서 Polyline(2D,3D 모두), Line, Text(CustomOverlay) 정도만 실행됩니다. 2번, 3번, 9번째 칸만 실행되므로 다른 칸을 선택하면 해당 프로시져가 없어, 객체 선택없이 바로 구글어스 지도를 띄웁니다. "Entity 다중 선택" 같이 14번째 칸을 선택하면 구글어스 지도만 띄웁니다.
삭제2. 구글어스는 별로 쓰지 않아, 폴리라인과 라인 정도만 있어도 될 것 같아 별도로 수정하지 않았습니다. 끝.
안녕하세요
답글삭제항상 고맙게 잘 사용하고 있는 사용자입니다.
컴퓨터를 바꾸면서 제가 CAD 2023을 쓰는데 AutoCAD 2023 Type Library이 나오지 않습니다 혹시 2023은 안되는 건가요?
1. "컴파일 오류입니다. 프로젝트나 라이브러리를 찾을 수 없습니다."라는 경고창이 뜨고,
삭제「확인」을 누르면, 예를 들어 "누락:Autocad 20?? Type Libraty" 이런 문구가 뜨나요?
2. Cad가 설치되면 윈도우에 라이브러리가 자동으로 등록 되는 것 같은데, 엑셀에서 Alt+F11 → 도구 → 참조 에서 "Autocad 2023 Type Libraay를 찾아 체크해 주시면 됩니다. 목록에서 없다면 Autocad 버전이 2022나 2024일 수도 있습니다.
그리고 "누락:Autocad 20?? ..."는 필요없으므로 체크해 주세요. 끝.
답글에서, 마지막 문장을 수정합니다.
삭제그리고 "누락:Autocad 20?? ..."는 필요 없으므로 체크 해제 해주세요. 꼭 안해도 됩니다. 끝.