Cập nhật tháng 2 năm 2009: thêm <gx:ElevationMode>, <gx:TimeStamp> và <gx:TimeSpan>.
Giới thiệu KML 2.2, <Camera>
cung cấp thêm một cách khác để chỉ định điểm quan sát của trình quan sát và tham số chế độ xem được liên kết. <Camera>
tương tự như <LookAt>
, vì cả hai phần tử này xác định vị trí và hướng của máy ảnh ảo đang xem Earth. Điểm khác biệt là LookAt chỉ định chế độ xem về mặt địa điểm ưa thích đang được xem. Ngược lại, Máy ảnh chỉ định chế độ xem về vị trí và hướng của người xem.
Cả <LookAt>
và <Camera>
đều được mở rộng qua phần tử <AbstractView>
, là một kiểu trừu tượng cơ sở. <Camera>
và <LookAt>
giống hệt nhau về cách sử dụng trong tệp KML — cụ thể là như một phần tử con của bất kỳ phần tử nào có được từ <Feature>
(Dấu vị trí, ScreenOverlay, GroundOverlay, PhotoOverlay, Folder, Document, NetworkLink) hoặc là một phần tử con của <NetworkLinkControl>
. Bạn có thể sử dụng <Camera>
hoặc <LookAt>
trong một Tính năng, nhưng không thể sử dụng cả hai cùng một lúc (nghĩa là chỉ một máy ảnh ảo có thể chỉ định điểm quan sát hiện tại).
Sự khác biệt giữa <Camera>
và <LookAt>
Phần tử <Camera>
mới cho phép bạn linh hoạt hơn trong cách chỉ định thành phần hiển thị. Quan trọng nhất, bạn có thể nghiêng chế độ xem của máy ảnh để nhìn lên trên đường chân trời về phía bầu trời. <Camera>
cung cấp đầy đủ quyền kiểm soát 6 bậc tự do đối với chế độ xem để bạn có thể đặt Máy ảnh trong không gian rồi xoay máy ảnh quanh các trục x, y và z. Nếu không chỉ định xoay, thì hai phần tử sẽ tương đương nhau:
<Camera>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</Camera>
<LookAt>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</LookAt>
Phần sau đây cung cấp nội dung đánh giá ngắn gọn về phần tử <LookAt>
để bạn có thể so sánh việc sử dụng phần tử đó với phần tử <Camera>
mới.
Bài đánh giá về <LookAt>
Phần tử <LookAt>
chỉ định điểm trên Trái Đất đang được xem, khoảng cách của điểm xem từ điểm yêu thích và góc của khung nhìn. Sau đây là cú pháp cho phần tử này:
<LookAt id="ID"> <longitude></longitude> <!-- kml:angle180 --> <latitude></latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <range></range> <!-- double --> <tilt>0</tilt> <!-- float --> <heading>0</heading> <!-- float --> <altitudeMode>clampToGround</altitudeMode> <!--kml:altitudeModeEnum:clampToGround, relativeToGround, absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </LookAt>
Sơ đồ dưới đây minh hoạ cách tạo điểm nhìn <LookAt>
:
Phần tử <LookAt>
chỉ định câu trả lời cho những câu hỏi sau:
Câu hỏi |
Thông số kỹ thuật trong <LookAt> |
Tôi đang xem điểm gì? | <kinh độ>, <vĩ độ>,<độ cao>, <độ cao> |
Điểm quan sát này cách điểm yêu thích bao xa? | <dải_ô> |
Chế độ xem có được định hướng để hướng Bắc nằm ở đầu chế độ xem không? | Nếu Có, hãy sử dụng giá trị <heading> mặc định là 0. Nếu Không, hãy chỉ định xoay <heading> từ >0 đến 360° |
Chế độ xem có đang nhìn thẳng xuống Trái Đất không? | Nếu Có, hãy sử dụng giá trị default<tilt>. Nếu Không, máy ảnh sẽ nghiêng lên về phía đường chân trời; chỉ định xoay <tilt> ≤ 90°. 90° nhìn thẳng ra đường chân trời. (Bạn có thể không nhìn thấy bề mặt Trái Đất nếu bạn ở xa và <tilt> bằng 90°.) |
Ví dụ:
Dưới đây là mẫu <Placemark>
chứa phần tử <LookAt>
:
<Placemark>
<name>Machu Picchu, Peru</name>
<LookAt>
<longitude>-72.503364</longitude>
<latitude>-13.209676</latitude>
<altitude>0</altitude>
<range>14794.882995</range>
<tilt>66.768762</tilt>
<heading>71.131493</heading>
</LookAt>
<styleUrl>#msn_icon12</styleUrl>
<Point>
<coordinates>-72.516244,-13.162806,0</coordinates>
</Point>
</Placemark>
Và đây là dấu vị trí hiển thị trong Google Earth:
Nếu hướng chế độ xem của bạn giao với hành tinh, hãy sử dụng phần tử <LookAt>
, vì phần này dễ chỉ định hơn <Camera>
một chút.
Các phần tử con của <Camera>
Phần tử <Camera>
cho phép định vị điểm mắt ở bất kỳ vị trí nào trong không gian và xoay góc nhìn theo hướng bất kỳ. Sau đây là cú pháp cho phần tử này:
<Camera id="ID"> <longitude>0</longitude> <!-- kml:angle180 --> <latitude>0</latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <heading>0</heading> <!-- kml:angle360 --> <tilt>0</tilt> <!-- kml:anglepos180 --> <roll>0</roll> <!-- kml:angle180 --> <altitudeMode>clampToGround</altitudeMode> <!-- kml:altitudeModeEnum: relativeToGround, clampToGround, or absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </Camera>
Phần tử <Camera>
chỉ định câu trả lời cho những câu hỏi sau:
Câu hỏi |
Thông số kỹ thuật trong <Camera> |
Máy ảnh nằm ở đâu trong không gian? | Đặt máy ảnh tại điểm được chỉ định bởi <kinh độ>, <vĩ độ>, <độ cao> và <độ cao>>. Nói chung, bạn không nên đặt máy ảnh trên mặt đất. |
Máy ảnh có được định hướng để hướng Bắc ở trên cùng của chế độ xem không? | Nếu Có, hãy sử dụng giá trị <heading> mặc định là 0. Nếu Không, hãy xoay máy ảnh từ >0 đến 360° theo các điểm của la bàn. |
Máy ảnh có đang nhìn thẳng xuống Trái Đất không? | Nếu Có, hãy sử dụng giá trị <tilt> mặc định là 0. Nếu Không, hãy xoay máy ảnh từ 0 đến 180° để chỉ định góc xoay xung quanh trục X. (Được phép sử dụng giá trị âm cho <tilt>, nhưng những giá trị này dẫn đến chế độ xem bị ngược.) |
Độ quay của camera có ghi lại cảnh quay không? | Nếu Có, hãy sử dụng giá trị <roll> mặc định là 0. Lưu ý: giá trị của <roll> khi nó được dùng làm phần tử con của <Camera> thường là 0. Bạn có thể chỉ định một giá trị trong khoảng từ -180 đến +180°, nhưng rất hiếm khi sử dụng. |
Sơ đồ dưới đây cho thấy các trục X, Y và Z được gắn với máy ảnh ảo.
- Trục X trỏ về bên phải của máy ảnh và được gọi là vectơ phải.
- Trục Y xác định hướng "up" tương ứng với màn hình và được gọi là vectơ lên.
- Trục Z hướng từ tâm màn hình về phía điểm mắt. Máy ảnh nhìn xuống trục -Z, được gọi là vectơ xem.
Dưới đây là ví dụ về cách thiết lập <Camera>
làm điểm bắt đầu trong <Document>
:
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Golden Gate tour</name>
<open>1</open>
<Camera>
<longitude>-122.4790</longitude>
<latitude>37.8110</latitude>
<altitude>127</altitude>
<heading>18.0</heading>
<tilt>85</tilt>
<altitudeMode>absolute</altitudeMode>
</Camera> </Document> </kml>
Đây là nội dung mà điểm nhìn này hiển thị trong Google Earth:
Thời gian trong AbstractView
<Camera>
và <LookAt>
đều có thể chứa thông tin thời gian. Điều này ảnh hưởng đến hình ảnh trong quá khứ, ánh sáng mặt trời và mọi đối tượng được gắn thẻ thời gian. <gx:TimeSpan>
và <gx:TimeStamp>
được dùng trong AbstractView và nằm trong không gian tên của phần mở rộng trên Google. Để biết thêm thông tin, vui lòng tham khảo phần Thời gian có AbstractView của chương Thời gian và Ảnh động.
Ví dụ
Ví dụ sau minh hoạ các cách xoay <Camera>
khác nhau.
Đầu đề
Ví dụ này cho thấy <Camera>
có tiêu đề là 90 độ (phía Đông) và nghiêng 90 độ (hướng về phía đường chân trời). Máy ảnh được đặt ở độ cao 100 mét.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark>
<name>100m looking east</name>
<Camera>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark> </Document> </kml>
Sau đây là kết quả trong Google Earth:
Độ nghiêng
Ví dụ sau đây sử dụng <Camera>
có độ nghiêng bằng 90 độ về phía đường chân trời. Phương thức này sử dụng các giá trị mặc định cho <heading>
, <altitude>
, <altitudeMode>
và <roll>
.
<Camera>
chứa giá trị <gx:TimeStamp>
; giá trị này ảnh hưởng đến hình ảnh và ánh sáng mặt trời lịch sử, cũng như việc hiển thị của bất kỳ đối tượng nào được gắn thẻ thời gian. Trong hình dưới đây, ánh sáng mặt trời đã được bật và <Camera>
đang xem vị trí lúc 3:29 chiều, giờ UTC ngày 1 tháng 1 năm 2009 (7:30 sáng, giờ địa phương).
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>At ground level</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<!-- altitude default is 0 (default altitudeMode is clampToGround) -->
<!-- heading default is 0 (north) -->
<tilt>90</tilt>
<!-- level -->
<!-- roll default is 0 -->
<!-- altitudeMode default is clampToGround -->
</Camera>
</Placemark>
</Document>
</kml>
Đây là nội dung mà điểm nhìn này hiển thị trong Google Earth:
Cuộn
Ví dụ này bao gồm phần tử <roll>
có giá trị là 45 độ, khiến máy ảnh cuộn sang trái.
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>Roll left</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<roll>45</roll>
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark>
</Document>
</kml>
Thứ tự chuyển đổi
Thứ tự xoay vòng rất quan trọng. Theo mặc định, máy ảnh đang nhìn thẳng xuống trục -Z về phía Trái đất. Trước khi thực hiện việc xoay, máy ảnh sẽ được dịch dọc theo trục Z sang <altitude>
. Thứ tự biến đổi như sau:
- <Elevation> – dịch dọc theo trục Z sang <elevation>
- <heading> – xoay quanh trục Z.
- <tilt> – xoay quanh trục X.
- <roll> – xoay quanh trục Z (một lần nữa).
Lưu ý rằng mỗi khi áp dụng chế độ xoay, hai trong số các trục của máy ảnh sẽ thay đổi hướng của chúng.