포털에서 발행되고 호스팅되는 타일 레이어는 미리 그려진 맵 이미지 또는 타일 컬렉션을 사용한 대용량 데이터셋의 빠른 시각화를 지원합니다. 호스팅 타일은 운영 레이어에 대한 지리적 컨텍스트를 제공합니다. 예를 들어 인근 지역의 도로 타일을 포함하여 피처 레이어에서 도로 표지판에 대한 시각적 기준을 제공할 수 있습니다.
다음 방법을 사용하여 포털에서 호스팅할 타일 레이어를 발행할 수 있습니다.
- ArcMap에서 맵을 정의하고 포털에서 타일을 생성하도록 허용합니다.
- ArcGIS Pro에서 맵을 정의하고 포털에서 타일을 생성하도록 허용합니다.
- ArcMap에서 타일 패키지를 만들고 공유한 다음 포털에서 발행합니다.
- ArcGIS Pro에서 타일 패키지를 만든 다음 포털에 업로드하고 발행합니다.
- 기존 호스팅 피처 레이어의 타일을 생성합니다.
- ArcMap에서 서비스 정의 파일을 정의하고 업로드한 후 포털에서 타일을 생성하도록 허용합니다.
발행 시 타일에 대한 캐시를 자동으로 생성하거나 발행 후 캐시를 수동으로 생성할 수 있습니다. 자세한 내용은 타일 캐시에 대한 모범 사례를 참고하세요.
맵 또는 서비스 정의 파일을 호스팅 타일 레이어로 발행하려면 콘텐츠를 생성하고 호스팅 타일 레이어를 발행할 권한이 있어야 합니다.
다음에서 맵 정의 및 발행 ArcMap
ArcMap을 이용하여 포털에서 호스팅할 타일 레이어를 발행할 수 있습니다.
ArcGIS Desktop을 시작하기 전에 ArcMap이 포털에 연결되어 있는지 확인하세요.
- ArcMap을 시작하고 발행할 맵을 엽니다.
- 콘텐츠를 생성하고 호스팅 타일 레이어를 발행할 권한이 있는 계정으로 포털에 로그인합니다.
- 파일 > 로그인을 클릭합니다.
- 포털의 사용자 이름과 비밀번호를 입력하고 로그인을 클릭합니다.
- 파일 > 공유 > 서비스를 클릭합니다.
- 서비스 발행을 선택하고 다음을 클릭합니다.
주의:
대신 서비스를 덮어쓰기로 선택한 경우에는 기존 맵 타일 항목이 포털에서 삭제되고 같은 이름의 새 항목이 생성됩니다. 새 항목은 루트 폴더에 생성되며 새 ID가 할당됩니다. 공유를 다시 구성해야 하고, 필요한 경우 재발행하기 전에 원래 폴더로 항목을 다시 이동해야 합니다.
- 연결 유형의 드롭다운 목록에서 내 호스팅 서비스를 선택합니다. 그런 다음 타일 이름을 입력하고 계속을 클릭합니다.
- 서비스 편집기에서 원하는 등록정보를 설정합니다. 여기에서 사용자가 타일을 사용하여 수행할 수 있는 작업을 선택하고 서버가 타일을 공개하는 방법을 더욱 세밀하게 제어할 수 있습니다.
배포를 위해 타일을 구성하는 최상의 방법에 대한 자세한 내용은 ArcGIS Server 도움말에서 서비스 조정 및 구성을 참고하세요. 이 항목에서 참조하는 등록정보 중 일부는 ArcGIS Server에만 적용되며 호스팅 타일 레이어를 사용할 때는 적용되지 않습니다.
팁:
이 세션 중에 서비스 편집기를 닫으면 작업을 임시 저장 서비스로 저장할지 묻는 메시지가 나타납니다. 임시 저장 서비스를 사용하면 나중에 서비스 구성 작업으로 돌아올 수 있습니다. 기본 설정에 따라 임시 저장 서비스는 내 호스팅되는 맵 연결의 임시 저장 폴더에 저장됩니다. 자세한 내용은 ArcGIS Server 도움말에서 임시 저장 서비스를 참고하세요.
- 서비스 편집기의 왼쪽 창에서 기능을 클릭한 다음 타일 매핑을 선택하여 맵을 타일 레이어로 나타냅니다. 맵 뷰어에 추가할 때 레이어에 대한 팝업을 구성하려는 경우 피처 접근을 클릭하여 타일과 함께 피처 레이어를 발행합니다.
서비스 편집기의 왼쪽 창에서 타일 매핑 하위 항목을 클릭하여 발행된 타일 레이어를 사용하여 작업할 수 있는 클라이언트와 관련된 고급 등록정보를 설정할 수 있습니다.
- 캐싱 항목을 클릭하여 타일 캐시에 대한 등록정보를 설정합니다. 자세한 단계는 ArcGIS Server 도움말에서 맵 캐시 생성을 참고하세요. 일부 고급 캐시 설정은 ArcGIS Server에 직접 발행하는 경우에만 사용할 수 있습니다.
- 서비스 편집기의 왼쪽 창에서 항목 설명을 클릭하고 타일 레이어에 대한 요약 및 태그를 입력합니다. 발행을 하려면 먼저 이 정보를 입력해야 합니다. 자세한 내용은 ArcGIS Server 도움말에서 맵 서비스 등록정보 설정의 항목 설명 섹션을 참고하세요.
- 서비스 편집기의 왼쪽 창에서 공유를 클릭하고 호스팅 타일 레이어를 공유할 대상을 선택합니다. 기본 설정에 따라 호스팅 타일 레이어는 내 콘텐츠에만 공유되므로 소유자만 접근할 수 있습니다. 타일 레이어는 항상 내 콘텐츠에 표시되지만 모든 사람 또는 내 기관의 구성원과 공유하거나 특정 그룹의 구성원과만 공유하도록 선택할 수도 있습니다.
- 서비스 편집기에서 분석을 클릭합니다.
분석은 맵을 검사하여 발행할 수 있는지 여부를 확인하는 작업입니다. 발행하려면 먼저 준비 창에서 오류를 수정해야 합니다. 필요한 경우 경고 및 정보 메시지를 수정하여 발행된 타일의 성능과 모양을 더욱 향상시킬 수 있습니다. 이러한 문제를 해결하는 방법은 ArcGIS Server 도움말에서 GIS 리소스 분석을 참고하세요.
- 필요한 경우 서비스 편집기에서 미리 보기를 클릭합니다. 이를 통해 맵에서 볼 때 타일 레이어가 어떻게 보여지는지 알 수 있습니다.
- 오류를 수정하고 필요에 따라 경고와 메시지를 수정했으면 발행을 클릭합니다.
참고 사항:
데이터는 이 시점에서 서버에 복사됩니다. 데이터 크기와 네트워크 연결 속도 및 대역폭에 따라 발행 시간이 달라집니다. 타일이 생성되는 데 약간의 시간이 걸립니다.
타일 레이어가 포털에 발행된 후에는 카탈로그 창에서 내 호스팅 서비스 노드를 확장하여 해당 타일을 볼 수 있습니다.
호스팅 타일 레이어는 포털 웹 사이트의 내 콘텐츠 페이지에 두 개의 독립된 항목(타일 및 서비스 정의)으로 나열됩니다. 서비스 정의는 맵, 맵 데이터, 타일 발행 방법에 대한 세부정보 등이 포함된 zip 파일입니다. ArcGIS Server를 실행하는 다른 머신에 서비스 정의를 전송 및 발행할 수 있습니다.
다음에서 맵 정의 및 발행 ArcGIS Pro
ArcGIS Pro의 맵을 이용해서 포털에서 호스팅할 타일 레이어를 발행할 수 있습니다.
웹 브라우저는 맵을 제작할 때 기존에 사용했던 일부 복잡한 지리 심볼을 나타낼 수 없습니다. 대부분의 심볼 유형을 사용할 수 있지만 발행하면 심볼이 다운그레이드되는 경우도 있을 수 있습니다. ArcGIS Server 도움말에서 피처 서비스 작성을 참고하여 지원되는 심볼에 대한 자세한 내용을 확인한 후, 발행하기 전에 맵 심볼에 대해 필요한 사항을 변경하세요.
- ArcGIS Pro를 시작하고 발행할 맵이 포함된 프로젝트를 엽니다.
- 포털 연결이 활성화되어 있어야 하며 콘텐츠를 생성하고 호스팅 타일 레이어를 발행할 권한이 있는 계정을 사용하여 내 기관에 로그인해야 합니다.
- 타일 레이어를 발행하려면 다음 중 하나를 수행하세요.
- 콘텐츠 창에서 레이어를 선택합니다. 선택 셋을 마우스 오른쪽 버튼으로 클릭하고 웹 레이어로 공유를 클릭합니다.
맵의 모든 레이어를 발행하려면 공유 탭의 공유 그룹에서 웹 레이어를 클릭한 다음 웹 레이어 발행을 클릭합니다.
팁:
웹 레이어로 공유 메뉴 옵션이 활성화되지 않은 경우 다음 중 하나 때문일 수 있습니다.
- 로그인한 계정에 호스팅 레이어를 발행할 권한이 없습니다.
- 포털에 웹 레이어를 호스팅하는 데 필요한 호스팅 서버가 구성되어 있지 않습니다.
- 지원되지 않는 멀티패치 레이어를 발행하려고 합니다.
- 타일 레이어의 이름을 입력합니다. 기본 설정에 따라 이 레이어는 내 콘텐츠에 저장됩니다. 폴더 이름을 입력하거나 기존 폴더를 검색하면 내 콘텐츠 내의 폴더에 저장할 수 있습니다.
- 모든 데이터 복사를 선택합니다.
- 레이어 유형에 대한 타일을 선택합니다.
데이터 복사 시에는 한 옵션만 선택할 수 있으므로 이 옵션을 선택하면 나머지 레이어 유형 옵션이 자동으로 선택 취소됩니다.
- 타일 레이어에 요약과 태그를 입력합니다.
- 타일 레이어 공유 방식을 지정합니다. 발행하는 모든 레이어는 내 기관 내의 개인 작업 영역(내 콘텐츠)에 자동으로 공유됩니다. 콘텐츠는 다음 중 하나 이상과 공유되지 않는 한 다른 사용자가 접근할 수 없습니다.
- 포털 이름 - 이 옵션을 선택하면 레이어를 포털에 있는 모든 인증된 사용자와 공유할 수 있습니다.
- 모든 사람 - 이 옵션을 선택하면 레이어가 포털 URL에 접근할 수 있는 모든 사용자에게 제공됩니다.
- 그룹 - 소속 그룹의 구성원과 레이어를 공유할 수 있습니다.
- 구성을 클릭한 다음 웹 레이어 등록정보 구성 버튼을 클릭하여 캐시 설정을 지정합니다.
- 타일링 스키마를 선택합니다.
- 상세도 막대의 크기를 조정하여 타일 레이어의 최소 및 최대 크기를 나타냅니다.
최소 및 최대 크기를 변경함에 따라 결과 캐시의 예상 크기가 변경됩니다.
- 타일 캐시를 생성할 시간과 위치를 선택합니다.
- 레이어를 발행할 때 타일이 포털의 호스팅 서버에 생성되도록 하려면 서버에서 자동으로 캐싱을 선택합니다.
- 포털의 호스팅 서버에서 캐시를 만들고 저장하려 하지만 발행 후에 직접 캐시를 만들려는 경우 서버에서 수동으로 캐싱을 선택하고 레이어가 발행된 후 포털 웹 사이트에서 타일 레이어를 열고 수동으로 캐시를 만듭니다.
- 캐시가 ArcGIS Pro 머신에 생성되고 패키지되도록 하려면 로컬로 캐싱을 선택하고 임시 타일 패키지가 저장될 ArcGIS Pro 머신의 위치를 지정합니다. 타일 패키지가 포털의 호스팅 서버에 자동으로 업로드되어 압축이 풀리고 캐시가 포털의 호스팅 서버에 저장됩니다.
- 맵을 다운로드하여 오프라인에서 사용할 수 있도록 하려면 클라이언트가 캐시 타일을 내보내도록 허용을 선택합니다.
- 클라이언트가 캐시 타일을 내보내도록 허용을 선택한 경우 클라이언트가 한 번에 오프라인 상태로 전환할 수 있는 최대 타일 수를 다음으로 내보내기 제한 필드에 지정합니다.
- 콘텐츠 탭을 클릭하여 의도한 데이터 레이어가 타일 레이어에 포함되는지 확인합니다.
- 분석을 클릭하여 오류나 문제가 있는지 확인합니다.
발견된 문제는 메시지 탭에 나열됩니다. 각 메시지를 마우스 오른쪽 버튼으로 클릭하여 자세한 내용을 확인하고, 오류나 경고에 대한 도움말을 읽고, 제시된 수정 프로그램에 접근합니다. 먼저 오류를 수정한 후에 발행해야 합니다. 필요한 경우 경고를 수정하여 호스팅 타일 레이어의 성능과 모양을 더욱 향상시킬 수 있습니다.
- 오류를 수정하고 필요에 따라 경고를 수정했으면 발행을 클릭합니다.
참고 사항:
데이터는 이 시점에서 서버에 복사됩니다. 데이터 크기와 네트워크 속도 및 대역폭에 따라 발행 시간이 달라집니다.
발행이 완료되면 웹 레이어 관리를 클릭하여 포털 웹 사이트를 열 수 있습니다.
ArcMap에서 타일 패키지를 만들고 공유한 다음 발행
ArcMap 에서는 맵 문서용 타일을 생성하여 쉽게 전송할 수 있는 타일 패키지(.tpk) 파일로 저장할 수 있습니다. ArcMap에서 타일 패키지를 생성하여 포털에 공유한 다음 호스팅 타일 레이어로 발행할 수 있습니다.
아래에는 두 가지 워크플로가 설명되어 있습니다. 첫 번째 워크플로는 소규모에서 적당한 규모의 타일 패키지에 사용할 수 있으며, 타일 패키지에서 타일을 발행할 때 범례 및 텍스트 요소와 같은 맵 문서의 요소를 유지합니다. 두 번째 워크플로는 대용량 타일 패키지를 발행할 때 권장되지만 타일 패키지에서 타일을 발행할 때 데이터만 유지합니다.
소규모에서 적정 규모 사이의 타일 패키지를 발행하려면 다음 단계를 따르세요.
- ArcMap에서 맵을 엽니다.
- 콘텐츠를 생성하고 호스팅 타일 레이어를 발행할 권한이 있는 계정으로 포털에 로그인합니다.
- 사용자 정의 > ArcMap 옵션 > 공유를 클릭하고 ArcGIS Runtime 도구 사용이 선택되어 있는지 확인합니다.
이 옵션을 선택해야 다음 단계에서 사용할 메뉴 옵션이 활성화됩니다.
- ArcMap에서 파일 > 다른 이름으로 공유 > 타일 패키지를 클릭합니다.
- 아래의 하위 단계에서 모든 설정을 구성합니다. 다른 설정은 원하는 대로 선택하면 됩니다.
- 타일 패키지 탭에서 내 ArcGIS Portal 계정에 패키지 업로드를 선택합니다.
- 타일 형식 탭에서 ArcGIS Online/Bing Maps/Google Maps를 타일링 스키마로 선택합니다.
- 항목 설명 탭에서 필수로 표시된 항목을 제공합니다.
- 공유 탭에서 일반 사용자 또는 특정 그룹과 패키지를 공유하도록 선택할 수 있습니다.
- 공유를 클릭합니다.
타일 패키지를 생성하려면 먼저 맵을 저장하라는 메시지가 표시될 수 있습니다.
타일 패키지를 생성하는 데 약간의 시간이 걸릴 수 있습니다. 특히 큰 축척이 포함된 경우 시간이 더 오래 걸립니다.
- 타일 패키지 생성을 마쳤으면 ArcMap에서 타일 패키지를 생성할 때와 동일한 계정을 사용하여 포털에 로그인한 다음 내 콘텐츠를 클릭합니다.
- 타일 패키지를 클릭하여 해당 항목 세부정보 페이지를 나타냅니다.
- 발행을 클릭합니다.
- 제목 및 태그를 입력하고 발행을 클릭합니다.
타일의 압축이 풀리고 호스팅 타일 레이어가 포털에 생성됩니다. 내 콘텐츠에서 맵 타일을 볼 수 있습니다.
큰 타일 패키지를 생성하고 공유하려면 이전 워크플로 대신 타일 캐시 도구모음을 사용하는 것이 좋습니다. 이러한 도구는 다중 코어를 활용할 수 있습니다.
도구를 다음에 나열된 순서대로 실행하세요.
- 타일 캐시 타일링 스키마 생성을 실행하여 타일링 그리드 및 이미지 형식을 정의합니다.
- 타일 캐시 관리를 실행하여 타일을 생성합니다.
- 타일 캐시 내보내기를 실행하여 타일 패키지를 생성합니다.
- 패키지 공유(패키지 도구모음)를 실행하여 포털에 타일을 업로드합니다.
팝업을 구성하려면 호스팅 타일 레이어가 포함된 피처 레이어를 지정해야 합니다.
ArcGIS Pro에서 타일 패키지를 만든 다음 내 기관에 업로드
맵 타일 패키지 생성 지오프로세싱 도구를 사용하여 타일 패키지를 만들고, 패키지를 내 기관에 추가하고, 타일 레이어를 발행합니다.
타일의 압축이 풀리고 호스팅 타일 레이어가 포털에 생성됩니다. 내 콘텐츠에서 맵 타일과 타일 패키지를 볼 수 있습니다.
호스팅 피처 레이어에서 발행
포털의 호스팅 서버가 ArcGIS Data Store를 통해 생성된 관계형 데이터 저장소를 사용하는 경우 소유하고 있는 기존 호스팅 피처 레이어를 사용하여 포털에 호스팅 타일 레이어를 발행할 수 있습니다. 대용량 데이터셋을 시각화하는 데 유용한 워크플로입니다.
참고 사항:
- 호스팅 피처 레이어에 대한 공간 속성 편집 내용이 호스팅 타일 레이어에 자동으로 반영되지는 않습니다. 업데이트된 호스팅 피처 레이어에서 호스팅 타일 레이어를 다시 발행해야 합니다.
- 호스팅 피처 레이어에는 호스팅 타일 레이어를 발행하지 못하게 할 수 있는 스타일 지정 제한 사항이 있습니다.
- 멀티패치 또는 포인트 클라우드 호스팅 피처 레이어에서는 호스팅 타일 레이어를 발행할 수 없습니다.
호스팅 피처 레이어에서 호스팅 타일 레이어를 발행하려면 다음 단계를 따르세요.
- 호스팅 타일 레이어를 발행할 권한이 있는 계정으로 로그인한 후 내 콘텐츠를 클릭합니다.
- 발행하려면 다음 중 하나를 수행합니다.
- 발행할 호스팅 피처 레이어를 클릭하고 발행을 클릭합니다.
- 타일 레이어 > 생성을 클릭하고 타일로 발행할 피처 레이어를 선택합니다.
- 제목, 태그 및 요약을 입력하고 호스팅 타일 레이어의 폴더를 선택합니다.
- 필요에 따라 가시 범위의 끝점을 드래그하여 레이어가 표시될 범위를 변경합니다.
주의:
Portal for ArcGIS 에서 제안 축척 범위가 제공되지만 이를 수정할 수 있습니다. 하지만 축척 범위에 큰 축척을 포함하면 서버에서 사용되는 리소스가 크게 증가할 수 있습니다. 따라서 데이터의 정밀도를 벗어나는 타일을 생성해서는 안 됩니다.
- 확인을 클릭합니다.
호스팅 타일 레이어가 생성되며 해당 항목 페이지가 나타납니다.
서비스 정의 파일에서 발행
타일을 발행하고 캐시를 생성하는 작업에는 많은 서버 리소스가 사용될 수 있습니다. 많은 수의 타일 레이어를 발행해야 하는 경우 맵 작성자는 ArcMap에서 타일 레이어를 포털에 발행하는 데 필요한 모든 정보가 포함된 서비스 정의(.sd) 파일을 생성할 수 있습니다. 그런 다음 스크립트를 사용하여 업무 시간 이후에 서비스 정의 파일을 포털에 업로드하고 발행할 수 있습니다. 결과 타일 레이어는 포털의 호스팅 서버에서 호스팅됩니다.
서비스 정의 파일 생성
맵 작성자는 다음 단계에 따라 포털에서 호스팅할 타일 레이어에 필요한 데이터와 심볼이 포함된 서비스 정의 파일을 생성해야 합니다.
- ArcMap을 시작하고 포털에 로그인합니다.
- 맵을 생성하고 저장합니다.
맵 생성 및 발행에 대한 자세한 내용은 ArcGIS Server 도움말에서 맵 서비스 항목을 참고하세요.
- 파일 > 공유 > 서비스를 클릭합니다.
- 서비스 정의 파일 저장을 선택하고 다음을 클릭합니다.
- 연결 선택을 클릭하고 드롭다운 목록에서 내 호스팅 서비스를 선택합니다.
- 파일 이름을 입력하고 다음을 클릭합니다.
- 서비스 정의 파일을 생성할 클라이언트 머신의 디렉터리를 지정하고 계속을 클릭합니다.
서비스 편집기가 열립니다.
- 서비스 편집기의 왼쪽 창에서 캐싱을 클릭합니다.
- 타일링 스키마를 선택합니다.
- 타일의 최소 및 최대 축척을 선택한 다음 캐시 크기 계산을 선택합니다.
- 서비스가 발행된 후 수동으로 캐시 생성을 클릭합니다.
- 필요한 경우 고급 설정을 클릭하여 타일 캐시에 대한 추가 캐시 설정을 지정할 수 있습니다.
- 서비스 편집기의 왼쪽 창에서 항목 설명을 클릭하고 타일 레이어에 대한 정보를 제공합니다.
서비스 정의 파일을 생성하려면 최소한 요약과 태그를 제공해야 합니다.
- 분석 을 클릭하여 파일에 오류가 없는지 확인합니다.
서비스 정의 파일을 준비하려면 먼저 모든 오류를 해결해야 합니다. 필요한 경우 반환된 모든 경고 및 메시지에 대해 수정 작업을 수행할 수 있습니다.
- 오류를 수정하고 필요에 따라 경고와 메시지를 수정했으면 스테이지 를 클릭합니다.
서비스 정의 파일이 지정한 위치에 저장됩니다.
서비스 정의 불러오기 및 발행
작성자로부터 서비스 정의 파일을 받은 후에는 포털의 내 콘텐츠에 서비스 정의 파일을 수동으로 업로드하고 타일 레이어를 발행하거나, 스크립트를 예약하여 파일을 업로드하고 발행할 수 있습니다.
수동 업로드 및 발행
포털 웹 사이트에 로그인하여 서비스 정의 파일을 포털에 추가하고 발행합니다.
- 콘텐츠를 생성하고 호스팅 타일 레이어를 발행할 권한이 있는 구성원으로 포털에 로그인한 후 내 콘텐츠를 엽니다.
- 항목 추가를 클릭합니다.
- 컴퓨터에서 파일을 불러오도록 선택합니다.
- 찾아보기 버튼을 클릭하고 서비스 정의 파일을 선택합니다.
- 이 파일을 서비스로 발행을 선택합니다.
- 쉼표로 구분된 태그 용어를 입력합니다.
태그는 항목을 설명하고 항목의 검색 가능성을 높여 주는 단어 또는 짧은 구입니다. Federal land는 태그 하나로 간주되지만 Federal,land는 태그 두 개로 간주됩니다.
- 항목 추가를 선택하여 서비스 정의 파일을 추가하고 타일 레이어를 발행합니다.
타일 레이어가 포털의 호스팅 서버에 발행되고 서비스 정의와 타일 둘 다 내 콘텐츠에 추가됩니다.
- 타일 레이어가 발행된 경우 타일 생성 시작 옵션이 제공됩니다. 이 링크를 클릭하여 타일을 생성합니다.
기본 설정에 따라 다른 사용자는 서비스 정의 파일 및 호스팅 타일 레이어에 접근할 수 없습니다. 파일 및 타일을 내 기관 또는 특정 그룹의 다른 사용자와 공유할 수 있습니다.
스크립트를 실행하여 업로드 및 발행
몇 시간 후에 서비스 정의 파일을 업로드하고 발행하려면 다음 스크립트를 자동화하여 GIS Server 머신에서 실행합니다.
- 다음 스크립트를 텍스트 파일에 복사한 다음 .py 확장자로 파일을 저장합니다.
import os, sys, json, urllib, urllib2, httplib, urlparse, mimetools, mimetypes from cStringIO import StringIO # generates a new token from Portal def generate_token(baseurl, username, password): tokenUrl = urlparse.urljoin(baseurl, 'sharing/generateToken') postdata = { 'username': username, 'password': password, 'client': 'requestip', 'expiration': 60, 'f': 'json' } encoded_postdata = urllib.urlencode(postdata) opener = urllib2.build_opener() try: resp = opener.open(tokenUrl, data=encoded_postdata) except urllib2.HTTPError as e: raise Exception('Unable to connect to Portal, please check the url: {} {}'.format(e.code, e.reason)) resp_json = json.loads(resp.read()) if 'error' in resp_json: raise Exception('\n'.join(resp_json['error']['details'])) return resp_json['token'] sys.exit(1) # create proper multi-part POST request data def _encode_multipart_formdata(fields, files): boundary = mimetools.choose_boundary() buf = StringIO() for (key, value) in fields.iteritems(): buf.write('--%s\r\n' % boundary) buf.write('Content-Disposition: form-data; name="%s"' % key) buf.write('\r\n\r\n%s\r\n' % str(value)) for (key, filepath, filename) in files: buf.write('--%s\r\n' % boundary) buf.write('Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename)) buf.write('Content-Type: %s\r\n' % (mimetypes.guess_type(filename)[0] or 'application/octet-stream')) f = open(filepath, "rb") try: buf.write('\r\n' + f.read() + '\r\n') finally: f.close() buf.write('--' + boundary + '--\r\n\r\n') buf = buf.getvalue() return boundary, buf # send multi-part POST request def _postmultipart(host, selector, fields, files, ssl): boundary, body = _encode_multipart_formdata(fields, files) headers = { 'Content-Type': 'multipart/form-data; boundary={0}'.format(boundary) } if ssl: h = httplib.HTTPSConnection(host) else: h = httplib.HTTPConnection(host) h.request('POST', selector, body, headers) resp = h.getresponse() return resp.read() # first upload the SD file and create an item in Portal def addSDItem(baseurl, user, token, title, file, folder = ''): addUrl = 'sharing/rest/content/users/{}/{}addItem' if folder != '': addUrl = addUrl.format(user, folder + '/') else: addUrl = addUrl.format(user, '') url = urlparse.urljoin(baseurl, addUrl) files = [('file', file, os.path.split(file)[1])] fields = { 'token' : token, 'f' : 'json', 'type' : 'Service Definition', 'title' : title, 'tags' : 'sampletag', 'name': title, 'typeKeywords' : 'Data, Service Definition, ArcGIS, sd' } ssl = url.startswith('https://') parsed_url = urlparse.urlparse(url) print('Uploading {} to {}..'.format(file, baseurl)) resp = _postmultipart(parsed_url.netloc, str(parsed_url.path), fields, files, ssl) resp_json = json.loads(resp) if 'error' in resp_json: raise Exception('Unable to upload file {}: {}'.format(file, resp_json['error']['message'])) return resp_json['id'] # second publish the uploaded SD item as a new tiled service def publishTiles(baseurl, user, token, itemid): publishUrl = urlparse.urljoin(baseurl, 'sharing/rest/content/users/{}/publish'.format(user)) query_dict= { 'f' : 'json', 'token': token, 'itemid': itemid, 'buildInitialCache' : True, 'publishParameters' : { 'name' : 'cities' }, 'fileType': 'serviceDefinition' } query_string = urllib.urlencode(query_dict) print('Publishing tile service from item..') response = urllib.urlopen(publishUrl, query_string) resp_json = json.loads(response.read()) if 'error' in resp_json: raise Exception('Unable to publish item: {}'.format(resp_json['error']['message'])) # read input from command line when run as a standalone script if __name__ == '__main__': try: url = sys.argv[1] user = sys.argv[2] password = sys.argv[3] f = sys.argv[4] title = sys.argv[5] if not url.endswith('/'): url += '/' # make sure the url ends with / except: # if too few parameters are passed on command line, show usage help print('Usage: ') print(' publishServiceItem.py [portalUrl] [userName] [password] [sdFilePath] [titleOfServiceItem]') print('') print('portalUrl The secure url to the portal, e.g. https://portalmachine.example.com/arcgis/') print('userName The username of a user to publish the service.') print(' This user must have the required publishing privileges.') print('password The password of the user') print('sdFilePath Path to the .sd file containing the service definition') print(' E.g. c:\\temp\cachedService.sd') print('titleOfServiceItem The title to assign to the published item in the portal.') sys.exit(1) token = generate_token(url, user, password) id = addSDItem(url, user, token, title, f) publishTiles(url, user, token, id) print('Publishing complete. Tile generation has been started and may take a while to finish.')
- Python 스크립트 실행을 예약하는 셸 스크립트 또는 배치 파일을 만듭니다.
- 파일에서는 Python 스크립트를 호출하고 사이트에 대한 옵션을 제공합니다.
예를 들어 publishServiceItem.py 스크립트를 실행하려면 포털 URL, 연결할 사용자의 이름, 사용자의 비밀번호, 서비스 정의 파일의 경로, 생성할 서비스의 제목을 입력합니다. 다음 예제에서 포털 URL은 https://portal.domain.com/arcgis/, 사용자의 이름과 비밀번호는 pub1 및 pub.1, 서비스 정의 파일의 경로는 C:\maps\SDs\mymap.sd, 서비스 이름은 studytiles입니다.
publishServiceItem.py https://portal.domain.com/arcgis/ pub1 pub.1 C:\maps\SDs\mymap.sd studytiles
팁:
또는 다음과 같이 간단한 스크립트를 사용하여 서비스 정의 파일을 포털에 업로드하고, 타일 레이어를 발행하고, 캐시를 생성할 수 있습니다. 하지만 이 스크립트를 실행하려면 Python 패키지(PortalPy 및 Python 요청)를 추가로 설치해야 합니다. PortalPy는 Portal for ArcGIS와 함께 설치됩니다. 이 모듈 설치와 사용에 대한 자세한 내용은 Portal for ArcGIS 도움말의 PortalPy를 사용하여 관리 작업 스크립팅을 참고하세요.
import portalpy, requests, urlparse, sys, os # first upload the SD file and create an item in Portal def addSDItem(baseurl, user, token, title, file, folder = ''): addUrl = 'sharing/rest/content/users/{}/{}addItem' if folder != '': addUrl = addUrl.format(user, folder + '/') else: addUrl = addUrl.format(user, '') url = urlparse.urljoin(baseurl, addUrl) files = { 'file' : (os.path.split(file)[1], open(file, 'rb')) } fields = { 'token' : token, 'f' : 'json', 'type' : 'Service Definition', 'title' : title, 'tags' : 'sampletag', 'name': title, 'typeKeywords' : 'Data, Service Definition, ArcGIS, sd' } print('Uploading {} to {}..'.format(file, baseurl)) # send POST with upload request # verify=False turns off SSL cert validation, turn on for production environments with CA-signed certs resp = requests.post(url, data=fields, files=files, verify=False) resp_json = resp.json() if 'error' in resp_json: raise Exception('Unable to upload file {}: {}'.format(file, resp_json['error']['message'])) return resp_json['id'] # second publish the uploaded SD item as a new tiled service def publishTiles(baseurl, user, token, itemid): publishUrl = urlparse.urljoin(baseurl, 'sharing/rest/content/users/{}/publish'.format(user)) query_dict= { 'f' : 'json', 'token': token, 'itemid': itemid, 'buildInitialCache' : True, 'publishParameters' : "{ 'name' : 'cities' }", 'fileType': 'serviceDefinition' } print('Publishing tile service from item..') # send POST with publish request # verify=False turns off SSL cert validation, turn on for production environments with CA-signed certs response = requests.post(publishUrl, data=query_dict, verify=False) resp_json = response.json() if 'error' in resp_json: raise Exception('Unable to publish item: {}'.format(resp_json['error']['message'])) # read input from command line when run as a standalone script if __name__ == '__main__': try: url = sys.argv[1] user = sys.argv[2] password = sys.argv[3] f = sys.argv[4] title = sys.argv[5] if not url.endswith('/'): url += '/' # make sure the url ends with / except: # if too few parameters are passed on command line, show usage help print('Usage: ') print(' publishServiceItem.py [portalUrl] [userName] [password] [sdFilePath] [titleOfServiceItem]') print('') print('portalUrl The secure url to the portal, e.g. https://portalmachine.example.com/arcgis/') print('userName The username of a user to publish the service.') print(' This user must have the required publishing privileges.') print('password The password of the user') print('sdFilePath Path to the .sd file containing the service definition') print(' E.g. c:\\temp\cachedService.sd') print('titleOfServiceItem The title to assign to the published item in the portal.') sys.exit(1) portal = portalpy.Portal(url, user, password) token = portal.generate_token(user, password) id = addSDItem(url, user, token, title, f) publishTiles(url, user, token, id) print('Publishing complete. Tile generation has been started and may take a while to finish.')
- 스크립트를 포털 사용량이 가장 낮을 때 실행하도록 예약합니다.
스크립트 예약에 대한 자세한 내용은 ArcGIS 지오프로세싱 도움말의 Python 스크립트를 예정된 시간에 실행되도록 예약을 참고하세요.