KML은 맞춤 데이터를 KML 지점에 추가할 수 있도록 세 가지 방법을 제공합니다. 이 중 어떤 방법을 선택하는 것이 적합한지는 어떤 유형의 데이터를 추가하고 KML 프레젠테이션에서 어떤 방식으로 데이터를 사용할지에 따라 다릅니다. <ExtendedData> 요소는 구체적으로 다음과 같은 메커니즘을 제공합니다.
- <Data> 요소 - 특정 지점(네트워크 링크(NetworkLink), 위치표시(Placemark), 지면 오버레이(GroundOverlay), 사진 오버레이(PhotoOverlay), 화면 오버레이(ScreenOverlay), 문서(Document) 또는 폴더(Folder))과 연결된 사용자 데이터에 유형이 지정되지 않은 이름/값 쌍을 추가할 수 있게 해 줍니다. 이러한 이름/값 쌍은 기본적으로 풍선에 표시됩니다. 이 정보는 또한 <BalloonStyle>의 <text> 요소에서 항목을 대체하는 경우에도 사용할 수 있습니다(풍선 스타일(BalloonStyle) 요소를 템플릿으로 사용 섹션 참조).
- <Schema> 및 <SchemaData> 요소 - 특정 지점에 연결된 사용자 데이터에 유형이 지정된 데이터를 추가할 수 있게 해 줍니다.
- 추상 XML 데이터 - KML 파일 내에 사용자 데이터를 보관할 수 있게 해 줍니다. Google 어스는 이 데이터를 파일과 함께 전달하여 저장하지만 데이터를 사용하지는 않습니다.
참고: 이 세 가지 메커니즘은 동일한 파일 내에서 함께 사용할 수 있습니다. 여러 소스의 다양한 데이터 유형을 추가하는 경우 일부 맞춤 데이터에는 유형이 지정된 데이터 방식(스키마/스키마 데이터)을 사용하고 나머지 데이터에는 유형이 지정되지 않은 데이터(데이터)를 사용하는 것이 좋을 수 있습니다.
접근 방식 선택
대부분의 경우 <Data> 요소는 KML 지점에 유형이 지정되지 않은 데이터를 추가하기 위한 가장 간단하고 강력한 메커니즘을 제공합니다. 이 방식은 상대적으로 구현이 쉬우며 KML 파일의 모든 위치표시에 적용 가능한 풍선 스타일 템플릿을 사용할 수 있다는 장점이 있습니다(사용 관련 예는 확장 데이터 요소의 항목 대체 참조).
<Schema> 및 <SchemaData> 요소를 사용하면 유형이 지정된 사용자 데이터를 추가할 수 있습니다. 이러한 요소는 주로 GIS(지역 정보 시스템) 데이터를 보유한 사용자에게 제공됩니다. 유형이 지정되어 있고 외부 컴퓨터 애플리케이션에서 사용하는 데이터를 보유한 경우 구조화된 데이터 유형을 지점에 추가하려면 <Schema> 및 <SchemaData> 요소를 사용해야 할 가능성이 높습니다. Google 어스에서는 유형이 지정된 정보를 사용하지 않지만 다른 애플리케이션에서 요구할 수 있습니다. 일반적인 사용자는 아마도 이 메커니즘에서 제공하는 좀 더 기술적인 측면이 필요 하지 않을 것입니다. <Data>와 마찬가지로 <SchemaData>는 풍선 스타일을 위한 템플릿을 사용할 수 있게 해 줍니다.
KML 파일과 함께 데이터를 전달하기만 하면 되고 이를 Google 어스에서 처리하지 않아도 되는 경우에는 추상 XML 데이터 기능을 사용하세요. 그러면 XML 네임스페이스 프리픽스를 참조하고 현재의 KML 문맥에 따라 데이터를 전달할 수 있습니다. 자세한 내용은 추상 XML 데이터 섹션을 참조하세요.
유형이 지정되지 않은 이름/값 쌍 추가
<Data> 요소는 유형이 지정되지 않은 이름/값 쌍을 KML 지점에 추가할 수 있게 해주는 간단하면서도 강력한 메커니즘입니다. 이 요소의 구문은 다음과 같습니다.
<ExtendedData>
<Data name="string">
<displayName>...</displayName> <!-- string -->
<value>...</value> <!-- string -->
</Data> </ExtendedData>
이름(name) 속성은 이 데이터 조각의 고유 ID입니다. <displayName> 요소는 이 데이터의 이름을 사용자 친화적인 형식으로 표시하려는 경우에 사용됩니다. <displayName>에는 공백, URL 및 하이퍼링크가 담긴 CDATA가 포함될 수 있습니다.
다음은 골프 코스의 여러 홀에 대한 맞춤 데이터가 포함된 위치표시의 예입니다.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>My Golf Course Example</name> <Placemark> <name>Club house</name> <ExtendedData> <Data name="holeNumber"> <value>1</value> </Data> <Data name="holeYardage"> <value>234</value> </Data> <Data name="holePar"> <value>4</value> </Data> </ExtendedData> <Point> <coordinates>-111.956,33.5043</coordinates> </Point>
</Placemark> <Placemark> <name>By the lake</name> <ExtendedData> <Data name="holeNumber"> <value>5</value> </Data> <Data name="holeYardage"> <value>523</value> </Data> <Data name="holePar"> <value>5</value> </Data> </ExtendedData> <Point> <coordinates>-111.95,33.5024</coordinates> </Point>
</Placemark> </Document> </kml>
이 스크린샷은 <Data> 요소가 위치표시 풍선의 표에 기본적으로 표시되는 방식을 보여줍니다.
풍선에 기본 스타일을 사용하는 데이터 예
![](https://developers-dot-devsite-v2-prod.appspot.com/static/kml/documentation/images/GolfCourse1.gif?authuser=0000&hl=ko)
검토: 풍선 스타일 요소를 템플릿으로 사용
KML에서는 스타일을 한 번 정의한 후 여기에 ID를 할당할 수 있습니다. 이렇게 스타일을 정의한 후에는 <styleUrl> 요소를 사용하여 이 스타일을 KML 파일(또는 다른 KML 파일) 내에서 여러 번 참조할 수 있습니다. 이렇게 정의된 스타일을 공유 스타일(shared style)이라고 부릅니다. <BalloonStyle> 내에 있는 <text> 요소는 항목 대체(entity replacement)를 지원합니다. 개별 값은 항목의 각 인스턴스별로 대체할 수 있습니다. 대체가 가능한 표준 항목은 다음과 같습니다.
- $[name]
- 위치표시의 이름으로 대체됨
- $[description]
- 위치표시의 설명(description)으로 대체됨
- $[address]
- 위치표시의 주소(address)로 대체됨
- $[id]
- 위치표시의 ID로 대체됨
- $[Snippet]
- 위치표시의 스니펫(Snippet)으로 대체됨
- $[geDirections]
- 위치표시의 출발지/목적지 운전경로로 대체됨
확장 데이터 요소의 항목 대체
Google 어스는 또한 <BalloonStyle>의 <text> 요소 내의 특정 확장 데이터 항목 대체를 지원합니다. <text> 요소 내에서 참조할 수 있는 항목은 다음과 같습니다.
변수 | 대체 항목 | 예 |
---|---|---|
$[name_attribute_of_Data_element] | <value> 항목의 콘텐츠 | 홀 번호(holeNumber), 홀 야드 수(holeYardage) |
$[name_attribute_of_Data/displayName] | <displayName> 항목의 콘텐츠 | 홀 번호, 홀 야드 수 |
다음은 골프 코스 예를 위한 <BalloonStyle> 템플릿을 만드는 예입니다. Google 어스는 각 위치표시 풍선의 위치표시 이름을 대체한 다음 홀 번호, 파 및 각 홀의 야드 수가 포함된 정보를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>Data+BalloonStyle</name> <Style id="golf-balloon-style"> <BalloonStyle> <text> <![CDATA[ 이는 $[name]임 이는 $[holeNumber]번 홀임 이 홀의 파는 $[holePar]임 야드수는 $[holeYardage]임 ]]> </text> </BalloonStyle> </Style> <!-- Shared style sample 두 개의 위치표시가 같은 풍선 탬플릿을 사용 --> <Placemark> <name>Club house</name> <styleUrl>#golf-balloon-style</styleUrl> <ExtendedData> <Data name="holeNumber"> <value>1</value> </Data> <Data name="holeYardage"> <value>234</value> </Data> <Data name="holePar"> <value>4</value> </Data> </ExtendedData> <Point> <coordinates>-111.956,33.5043</coordinates> </Point> </Placemark> <Placemark> <name>By the lake</name> <styleUrl>#golf-balloon-style</styleUrl> <ExtendedData> <Data name="holeNumber"> <value>5</value> </Data> <Data name="holeYardage"> <value>523</value> </Data> <Data name="holePar"> <value>5</value> </Data> </ExtendedData> <Point> <coordinates>-111.95,33.5024</coordinates> </Point> </Placemark> </Document> </kml>
다음은 이 예의 캡처입니다.
풍선에 기본 스타일을 사용하는 데이터 예
![](https://developers-dot-devsite-v2-prod.appspot.com/static/kml/documentation/images/GolfCourse2.gif?authuser=0000&hl=ko)
다음은 <displayName> 요소가 어떻게 사용되는지 좀 더 현실적으로 보여주는 예입니다. 이 기술은 텍스트 로컬라이제이션 및 좀 더 정교한 형식에 적합합니다.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Entity-Replacement</name>
<Style id="displayName-value">
<BalloonStyle>
<text>
<![CDATA[
이는 $[name]임<br/>
$[holeNumber/displayName] $[holeNumber]<br/>
$[holePar/displayName] $[holePar]<br/>
$[holeYardage/displayName] $[holeYardage]
]]>
</text>
</BalloonStyle>
</Style>
<!-- Shared style sample
두 개의 위치표시가 같은 풍선 탬플릿을 사용
-->
<Placemark>
<name>Club house</name>
<styleUrl>#displayName-value</styleUrl>
<ExtendedData>
<Data name="holeNumber">
<displayName><![CDATA[
<b>이는 다음 홀임 </b>
]]></displayName>
<value>1</value>
</Data>
<Data name="holePar">
<displayName><![CDATA[
<i>이 홀의 파는 다음과 같음 </i>
]]></displayName>
<value>4</value>
</Data>
<Data name="holeYardage">
<displayName><![CDATA[
<b><i>야드수는 다음과 같음 </i></b>
]]></displayName>
<value>234</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.956,33.5043</coordinates>
</Point>
</Placemark>
<Placemark>
<name>By the lake</name>
<styleUrl>#Entity-Replacement</styleUrl>
<ExtendedData>
<Data name="holeNumber">
<displayName><![CDATA[
<b>이는 다음 홀임 </b>
]]></displayName>
<value>5</value>
</Data>
<Data name="holePar">
<displayName><![CDATA[
<i>이 홀의 파는 다음과 같음 </i>
]]></displayName>
<value>5</value>
</Data>
<Data name="holeYardage">
<displayName><![CDATA[
<b><i>야드수는 다음과 같음 </i></b>
]]></displayName>
<value>523</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.95,33.5024</coordinates>
</Point>
</Placemark>
</Document>
</kml>
다음은 이 풍선 스타일 템플릿을 사용하는 풍선의 예입니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/kml/documentation/images/GolfCourse3.gif?authuser=0000&hl=ko)
유형이 지정된 데이터를 지점에 추가
<Schema> 및 <SchemaData> 요소를 사용하면 유형이 지정된 데이터를 지형지물에 추가할 수 있습니다. 특정 GIS 및 프로그래밍 애플리케이션은 유형이 지정된 데이터를 다루기 때문에 이러한 기능을 필요로 합니다.
유형이 지정된 데이터 추가 개요
맞춤 유형을 KML 지점에 추가하려면 기본적인 두 가지 작업을 수행해야 합니다.
- 새 유형을 선언하는 <Schema> 요소를 만듭니다.
- <SchemaData> 요소를 사용하여 새 유형의 인스턴스를 만듭니다.
스키마 요소 선언
스키마 요소는 구조화된 유형을 선언합니다. <Schema>는 항상 <Document>의 하위 요소입니다. 문서에는 0개 이상의 스키마 요소가 포함될 수 있습니다.
ID 속성
<Schema> 요소에는 <SchemaData> 요소를 사용하여 이러한 유형의 인스턴트를 생성할 때 참조되는 ID 속성이 항상 포함되어 있습니다. 이 ID는 KML 파일 내에서 고유해야 합니다.
이름 속성
항목 대체에 사용되는 이름 속성은 선택사항입니다.
구문
스키마 요소에는 다음 구문이 포함됩니다.
<Schema name="string" id="ID"> <SimpleField type="string" name="string"> <displayName>...</displayName> <!-- string --> </SimpleField> </Schema>
<SimpleField>에는 항상 이름 및 유형(type) 속성이 모두 있습니다. 이 속성 중에서 하나라도 빠진 입력란은 무시됩니다. 이름 속성은 <BalloonStyle>의 <text> 요소에서 항목을 대체하는 데 사용됩니다. 단순 입력란의 유형은 다음 중 하나입니다.
string
int
uint
short
ushort
float
double
bool
데이터의 각 인스턴스 정의
<SchemaData> 요소를 사용하여 맞춤설정 유형의 인스턴스를 만듭니다. <SchemaData>의 구문은 다음과 같습니다.
<ExtendedData> <SchemaData schemaUrl="anyURI"> <SimpleData name=""> ... </SimpleData> <!-- string --> </SchemaData> </ExtendedData>
스키마 URL(schemaUrl) 속성은 유형을 선언하는 스키마의 id를 참조합니다. 이는 이미 선언된 스타일(Style)의 id를 스타일 URL(styleUrl)이 참조하는 것과 마찬가지입니다.스타일 URL이 http 주소인 경우 Google 어스는 네트워크 전체에 이 파일을 가져옵니다. 지정된 맞춤설정 유형의 인스턴스는 위치표시당 1개로 제한됩니다.
예
다음 예는 경치 전망(ScenicVista)이라는 이름의 맞춤설정 유형을 선언합니다. 이 유형은 (트레일 헤드 이름(TrailHeadName), 트레일 길이(TrailLength) 및 고도 추가(ElevationGain))라는 3개의 입력란을 포함합니다. 트레일 헤드 이름 입력란은 문자열
유형의 값을 포함합니다. 트레일 길이 입력란은 이중
유형의 값을 포함합니다. 고도 추가 입력란은 내부
유형의 값을 포함합니다. 쉬운 트레일(Easy trail) 이라는 이름의 위치표시는 이 맞춤설정 유형의 인스턴스를 포함합니다. 이 인스턴스의 경우 '하늘 위의 파이'를 트레일 헤드 이름 입력란의 값으로 포함하며 트레일 길이 입력란 값으로 3.14159 및 고도 추가 입력란의 값으로 10을 포함합니다.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>ExtendedData+SchemaData</name> <open>1</open> <!-- Declare the type "TrailHeadType" with 3 fields --> <Schema name="TrailHeadType" id="TrailHeadTypeId"> <SimpleField type="string" name="TrailHeadName"> <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName> </SimpleField> <SimpleField type="double" name="TrailLength"> <displayName><![CDATA[<i>Length in miles</i>]]></displayName> </SimpleField> <SimpleField type="int" name="ElevationGain"> <displayName><![CDATA[<i>Change in altitude</i>]]></displayName> </SimpleField> </Schema> <!-- This is analogous to adding three fields to a new element of type TrailHead: <TrailHeadType> <TrailHeadName>...</TrailHeadName> <TrailLength>...</TrailLength> <ElevationGain>...</ElevationGain> </TrailHeadType>
--> <!-- Instantiate some Placemarks extended with TrailHeadType fields --> <Placemark> <name>Easy trail</name> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Pi in the sky</SimpleData> <SimpleData name="TrailLength">3.14159</SimpleData> <SimpleData name="ElevationGain">10</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-122.000,37.002</coordinates> </Point> </Placemark> <Placemark> <name>Difficult trail</name> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Mount Everest</SimpleData> <SimpleData name="TrailLength">347.45</SimpleData> <SimpleData name="ElevationGain">10000</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-121.998,37.0078</coordinates> </Point> </Placemark> </Document> </kml>
풍선에 기본 스타일을 사용하는 스키마 데이터 예
![](https://developers-dot-devsite-v2-prod.appspot.com/static/kml/documentation/images/SchemaTrails2.gif?authuser=0000&hl=ko)
표시 이름(displayName) 항목 대체
스키마/스키마 데이터(Schema/SchemaData) 메커니즘 또한 <BalloonStyle> 요소의 <text> 요소 내에서 항목 대체를 지원합니다.
<Schema>의 <displayName>을 사용하면 맞춤설정 데이터 유형으로 사용자 친화적인 버전을 전달할 수 있습니다.<Schema>에서 문자열을 한 번 바꾸면 이 유형을 포함하는 모든 지점의 <displayName>을 변경하는 효과가 있습니다.
<BalloonStyle> 요소의 <text> 요소에서 다음 구문을 사용하여 <displayName>에 자격을 부여합니다.
$[TYPENAME/TYPEFIELD/displayName]
where
- TYPENAME
- is the name attribute of <Schema>
- TYPEFIELD
- is the name attribute of <SimpleField>
- displayName
- is the <displayName> element within <SimpleField>
다음 코드는 이전의 스키마 데이터 예에 풍선 스타일 템플릿을 추가합니다. 골프 코스 예와 마찬가지로 템플릿은 문서 시작 부분의 <Style>, <BalloonStyle> 및 <text> 요소를 사용하여 생성됩니다. 파일의 각 위치표시는 '확장 데이터+스키마 데이터'라는 이름의 스타일 템플릿을 참조합니다.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>ExtendedData+SchemaData</name> <open>1</open> <!-- Create a balloon template referring to the user-defined type --> <Style id="trailhead-balloon-template"> <BalloonStyle> <text> <![CDATA[ <h2>My favorite trails!H2 <br/><br/> The $[TrailHeadType/TrailHeadName/displayName] is <i>$[TrailHeadType/TrailHeadName]</i>. The trail is $[TrailHeadType/TrailLength] miles. <br/> The climb is $[TrailHeadType/ElevationGain] meters. <br/><br/> ]]> </text> </BalloonStyle> </Style> <!-- Declare the type "TrailHeadType" with 3 fields --> <Schema name="TrailHeadType" id="TrailHeadTypeId"> <SimpleField type="string" name="TrailHeadName"> <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName> </SimpleField> <SimpleField type="double" name="TrailLength"> <displayName><![CDATA[<i>The length in miles</i>]]></displayName> </SimpleField> <SimpleField type="int" name="ElevationGain"> <displayName><![CDATA[<i>change in altitude</i>]]></displayName> </SimpleField> </Schema> <!-- Instantiate some Placemarks extended with TrailHeadType fields --> <Placemark> <name>Easy trail</name> <styleUrl>#trailhead-balloon-template</styleUrl> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Pi in the sky</SimpleData> <SimpleData name="TrailLength">3.14159</SimpleData> <SimpleData name="ElevationGain">10</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-122.000,37.002</coordinates> </Point> </Placemark> <Placemark> <name>Difficult trail</name> <styleUrl>#trailhead-balloon-template</styleUrl> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Mount Everest</SimpleData> <SimpleData name="TrailLength">347.45</SimpleData> <SimpleData name="ElevationGain">10000</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-121.998,37.0078</coordinates> </Point> </Placemark> </Document> </kml>
풍선 스타일 템플릿을 사용한 스키마 데이터 예
풍선 스타일 템플릿을 사용하여 만든 풍선을 위의 스크린샷에 표시된 동일한 데이터의 기본 풍선 스타일과 비교합니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/kml/documentation/images/schemaTrails.gif?authuser=0000&hl=ko)
지점에 추상 XML 데이터 추가
지점에 사용자 데이터를 추가하는 가장 간단한 방법은 데이터를 <ExtendedData>의 값으로 직접 추가하는 것입니다. Google 어스는 이 데이터를 보관하지만 처리하지는 않습니다.
이렇게 추가된 맞춤설정 데이터 요소는 네임스페이스 프리픽스(namespace prefix. xmlns:prefix="namespace")를 포함해야 합니다. 이 프리픽스는 <kml> 또는 <ExtendedData> 요소에 추가할 수 있습니다. 외부 네임스페이스 프리픽스는 다음 예에 표시된 것처럼 사용자 데이터의 각 인스턴스에 자격을 부여해야 합니다.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>ExtendedData Test</name> <Placemark> <name>CampsiteData</name> <!-- Imported schema requires use of namespace prefix --> <ExtendedData xmlns:camp="http://campsites.com"> <camp:number>14</camp:number> <camp:parkingSpaces>2</camp:parkingSpaces> <camp:tentSites>4</camp:tentSites> </ExtendedData> <Point> <coordinates>-114.041,53.7199</coordinates> </Point> </Placemark> </Document> </kml>