وقتی ارتفاع عوارض روی نقشه سهبعدی - مانند خطوط، چندضلعیها، مدلها یا نشانگرها - را مشخص میکنید، عوامل متعددی وجود دارند که میتوانند بر قرارگیری آنها، هم در صحنه و هم در نحوه تعامل رندر صحنه با آن عارضه، تأثیر بگذارند. این سند استفاده از «حالت ارتفاع» در نقشه سهبعدی و نحوه مدیریت ارتفاع عوارض را پوشش میدهد.
در اینجا نحوه استفاده از AltitudeMode با تعدادی از انواع ویژگیها آورده شده است:
نشانگرها: Marker3DElement ، Marker3DInteractiveElement
ارتفاع محل و همچنین میزان بیرون زدگی را مشخص کنید.
مدلها: Model3DElement ، Model3DInteractiveElement
ارتفاع نقطه لنگر مدل را مشخص کنید، که باید با جهت گیری آن برای موقعیت یابی مناسب در صحنه استفاده شود.
چندخطیها: Polyline3DElement ، Polyline3DInteractiveElement
نحوه اعمال ارتفاع بر روی نقاط موقعیت در امتداد یک چندخطی را مشخص کنید.
چندضلعیها: Polygon3DElement ، Polygon3DInteractiveElement
نحوه اعمال ارتفاع بر نقاط موقعیت در امتداد یک چندضلعی را مشخص کنید.
نحوه استفاده از ارتفاع در محیطهای سهبعدی
هنگام قرار دادن نقاط در یک صحنه سهبعدی، موقعیت نهایی آنها تحت تأثیر وجود ساختمانهای سهبعدی ثبتشده یا اشیاء مانند درختان قرار میگیرد. درک دو مفهوم کلیدی بسیار مهم است:
- مدل دیجیتال زمین (DTM) : این مدل، ارتفاع «زمین لخت» را نشان میدهد. آن را به عنوان شکل طبیعی زمین بدون هیچ ساختمان، درخت یا سازه دیگری در بالا در نظر بگیرید. همه مناطق توسط DTM پشتیبانی میشوند، که اساس ارتفاع کره زمین را تشکیل میدهد (محاسبه شده با استفاده از EGM96 ).
- مدل سطح دیجیتال (DSM) : این مدل، ارتفاع «سطح بالایی»، شامل ساختمانها، درختان و سایر سازهها را نشان میدهد. در مناطقی که عوارض ثبت شدهاند (بهویژه محیطهای شهری که ساختمانها بر دید غالب هستند)، سطح مرئی بالاتر از زمین پایه به نظر میرسد.
تمایز بین DTM و DSM برای درک چگونگی تعامل حالتهای مختلف ارتفاع با این مدلهای ارتفاعی رقومی (DEM) بسیار حیاتی است، زیرا ممکن است محل قرارگیری عوارض زمینی مبهم باشد یا تحت تأثیر مدل سطحی قرار گیرد. میتوانید تفاوتها را در نمودار زیر مشاهده کنید:

وقتی عوارض فاقد دادههای ارتفاعی هستند
اگر دادههایی دارید که فاقد اندازهگیری ارتفاع هستند یا هنگام استفاده از دادههای سرویس دیگر گوگل، مانند سرویسهای Routes یا Places، اغلب هیچ ارتفاعی در هندسهی بازگشتی ارائه نمیشود. در چنین مواردی، قرار دادن ویژگی در صحنه مستلزم انتخاب دقیق AltitudeMode است:
- آن را به زمین محکم کنید : سادهترین روش، که در آن عارضه به طور خودکار با زمین مطابقت پیدا میکند. این حالت از مدل DTM استفاده میکند.
- به آن یک ارتفاع دلخواه + حالت نسبی بدهید : میتوانید یک ارتفاع انتخاب شده را اختصاص دهید و سپس از RELATIVE_TO_GROUND (که عوارض را نسبت به مدل DTM قرار میدهد) یا RELATIVE_TO_MESH (که آنها را بالای مدل DSM شناور میکند) استفاده کنید.
- استفاده از سرویس دیگری برای بدست آوردن ارتفاع : برای بدست آوردن ارتفاع دقیق DTM در محل عارضه، میتوانید از سرویسی مانند API ارتفاع پلتفرم نقشههای گوگل استفاده کنید. اگر یک خط یا چندضلعی باشد، باید این کار را برای هر یک از نقاطی که خط یا چندضلعی را تشکیل میدهند، انجام دهید.
گزینههای AltitudeMode به چه معناست و چه زمانی باید از آنها استفاده کرد؟
چهار گزینه AltitudeMode وجود دارد که میتوانید هنگام تعریف یک ویژگی مشخص کنید:
مطلق
تصور کنید هواپیمایی در ارتفاع مشخصی از سطح دریا، مثلاً ۱۰۰۰۰ فوت، پرواز میکند. ارتفاع آن ثابت است، فرقی نمیکند که بر فراز کوه باشد یا دره.
نحوه استفاده : ارتفاع جسم نسبت به میانگین سطح دریا (محاسبه شده با استفاده از EGM96) بیان میشود. مختصات ارتفاعی عارضه به عنوان ارتفاع دقیق از سطح دریا تفسیر میشود.
چه زمانی از آن استفاده کنیم : برای ویژگیهایی با ارتفاع مشخص و دقیق، مانند مسیرهای پرواز، اشیاء غوطهور با عمق دقیق، یا ابزارهای علمی نقطه ثابت.
اتصال به زمین
تصور کنید که یک پتوی پیکنیک را مستقیماً روی دامنه تپه قرار دهید. مهم نیست تپه چقدر شیبدار یا مسطح باشد، پتو همیشه روی سطح قابل مشاهده صاف قرار میگیرد.
نحوه استفاده : ارتفاع جسم به صورت قرار گرفتن مستقیم روی زمین بیان میشود. آنها صرف نظر از هرگونه مقدار ارتفاع ارائه شده، در سطح زمین باقی میمانند و از عوارض زمین پیروی میکنند. مختصات ارتفاع عارضه نادیده گرفته میشود؛ مستقیماً روی سطح زمین (DTM) تصویر میشود.
چه زمانی از آن استفاده کنیم : برای عوارضی که همیشه باید با زمین مطابقت داشته باشند، مانند جادهها، نردهها، مسیرها، مرزهای املاک یا پایه ساختمانها.
وابسته به زمین
یک بالن هوای گرم را تصور کنید که ۱۰۰ متر بالاتر از ارتفاع طبیعی زمین (DTM) زیر آن باقی میماند. اگر زمین بالا برود، بالن نیز با آن بالا میرود و آن فاصله ۱۰۰ متری را از «زمین لخت» حفظ میکند.
نحوه استفاده : ارتفاع جسم نسبت به سطح زمین (DTM) بیان میشود. مختصات ارتفاعی عارضه به عنوان انحراف از ارتفاع زمین در موقعیت افقی آن تفسیر میشود.
چه زمانی از آن استفاده کنیم : برای اشیایی که نیاز به حفظ ارتفاع ثابت نسبت به زمین طبیعی دارند، مانند دکلهای مخابراتی یا خطوط هوایی در مناطق روستایی.
نسبی_به_مش
این مانند پهپادی است که در ارتفاع ثابتی بالاتر از هر چیزی که بر فراز آن پرواز میکند، چه زمین خالی باشد، چه سقف ساختمان یا نوک درخت، پرواز میکند. این پهپاد خود را با بالاترین سطح قابل مشاهده (DSM) تنظیم میکند.
نحوه استفاده : ارتفاع جسم نسبت به بالاترین سطح زمین + ساختمان + سطح آب (DSM) بیان میشود. مختصات ارتفاعی عارضه به عنوان انحراف از ارتفاع DSM تفسیر میشود.
چه زمانی از آن استفاده کنیم : برای اشیایی که نیاز دارند در ارتفاع مشخصی بالاتر از هر آنچه که از نظر فیزیکی وجود دارد (DTM، ساختمانها، آب) شناور باشند، برای نشانگرهای روی سقفها یا ویژگیهایی که به صورت پویا با صحنه قابل مشاهده تنظیم میشوند، مفید است.
برای جزئیات بیشتر، به مستندات مربوط به ثابتهای AltitudeMode مراجعه کنید.
مثالهای تصویری و کاربردهای عملی
این مثالها از یک مکان خاص، استونهنج، برای نشان دادن چگونگی تأثیر گزینههای مختلف AltitudeMode بر قرارگیری عوارض استفاده میکنند. این مثالها ابتدا نشانگرهای موقعیتیابی، سپس خطوط و نواحی را پوشش میدهند که ملاحظات مختلفی دارند.
نشانگرهای موقعیت
یک نشانگر پین را که به صورت زیر قرار داده شده است در نظر بگیرید:
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
میتوانید این را به صورت پین سفید در صحنه زیر ببینید:

حالا به تصویر زیر نگاه کنید که پینهایی با رنگهای مختلف را نشان میدهد که با استفاده از حالتهای ارتفاع مختلف قرار گرفتهاند.

بیایید نگاهی بیندازیم که چگونه حالتهای مختلف AltitudeMode بر موقعیت نشانگر به ترتیب صعودی ارتفاع تأثیر میگذارند.
گیره به زمین (پین بنفش)
این پین مقدار ارتفاع را نادیده میگیرد و خود را به نزدیکترین ارتفاع زمین متصل میکند. میتوانید آن را درست زیر پین سفید ببینید که عملاً به زمین "متصل" میشود.
از نظر فنی، این حالت ارتفاع واقعی را نادیده میگیرد و پین را به نزدیکترین ارتفاع DTM متصل میکند.
مطلق (پین سفید)
این پین از مقدار دقیق ارتفاع (۱۰۲.۲۳ متر) برای قرار دادن نشانگر در آن ارتفاع از سطح دریا (EGM96) استفاده میکند و بر روی یکی از سنگهای استونهنج، مطابق با ارتفاع ارائه شده، ظاهر میشود.
از نظر فنی، این حالت از مقدار ارتفاع واقعی ارائه شده برای قرار دادن پین در ارتفاع مشخص شده از سطح دریا استفاده میکند، که در این مثال محل استونهنج است، اما در بالای یکی از سنگها.
RELATIVE_TO_GROUND (پین نارنجی)
این پین، زمین (DTM) را به عنوان پایه خود در نظر میگیرد و خود را در ارتفاع ۱۰۲.۲۳ متری بالاتر از سطح زمین قرار میدهد، به طوری که به نظر میرسد بالای زمین طبیعی زیر سنگِ هنج شناور است.
از نظر فنی، این حالت پایه خود را روی سطح DTM واقعی روی زمین تنظیم میکند و سپس پین را در ارتفاع ۱۰۲.۲۳ متری بالای آن قرار میدهد.
RELATIVE_TO_MESH (پین آبی)
این پین از سطح مرئی (DSM) به عنوان پایه خود استفاده میکند و خود را 102.23 متر بالاتر از آن سطح قرار میدهد. این حالت ارتفاع سنگ را در اندازهگیری خود لحاظ میکند و آن را کمی بالاتر از پین نارنجی تراز میکند.
از نظر فنی، این حالت از شبکه (DSM) به عنوان مبنا استفاده میکند و مکان را در ارتفاع داده شده بالاتر از آن قرار میدهد. از آنجایی که DSM در بالای سنگ ایستاده قرار دارد، این پین هنگام تعیین ارتفاع نسبی آن، این ارتفاع اضافی را در اندازهگیری خود لحاظ میکند و آن را کمی بالاتر از پین RELATIVE_TO_GROUND تراز میکند.
خطوط و مناطق موقعیت
برای خطوط و مناطق، هم ارتفاع نقاط درون عارضه (چه مشخص شده باشند و چه نباشند) و هم AltitudeMode مورد استفاده بسیار مهم هستند. بیایید خطی را در امتداد استونهنج با ارتفاعات مشخص شده زیر بررسی کنیم:
const lineCoords = [
{ lat: 51.1786, lng : -1.8266, altitude: 101.36 },
{ lat: 51.1787, lng : -1.8264, altitude: 101.18 },
{ lat: 51.178778, lng : -1.826354, altitude: 104.89 },
{ lat: 51.178815, lng : -1.826275, altitude: 107.55 },
{ lat: 51.178923, lng : -1.825980, altitude: 105.53 },
{ lat: 51.1791, lng : -1.8258, altitude: 100.29 },
{ lat: 51.1792, lng : -1.8257, altitude: 100.29 }
];
میتوانید این خط را که در تصویر زیر با رنگ سفید و با استفاده از موقعیتیابی مطلق نشان داده شده است، ببینید.

یک بار دیگر، تصویر زیر خطوط را با استفاده از حالتهای مختلف ارتفاع نشان میدهد. اجازه دهید هر کدام را به ترتیب، از کمترین به بیشترین، مورد بحث قرار دهیم.

اتصال به زمین (خط بنفش)
این خط، ارتفاع مشخص شده برای هر نقطه را نادیده میگیرد و در عوض، خط را مستقیماً روی زمین زیرین (DTM) "میکشد". این خط، عوارض زمین را دنبال میکند و وجود هرگونه ویژگی مانند ساختمان یا سنگ در بالای آن را نادیده میگیرد.
از نظر فنی، این حالت مقادیر واقعی ارتفاع را نادیده میگیرد و خط را روی DTM میپوشاند، زمین زیرین را دنبال میکند و شبکه عوارض بالای آن را نادیده میگیرد.
مطلق (خط سفید)
این خط از ارتفاع دقیق هر نقطه استفاده میکند و باعث میشود خط از روی برخی از سنگها عبور کند. این خط با خطوط مستقیم بین هر نقطه به هم متصل شده است، که اگر نقاط به اندازه کافی مکرر نباشند، گاهی اوقات میتواند باعث شود که از میان اشیاء عبور کند.
از نظر فنی، این حالت ارتفاع مشخص شده برای هر نقطه را دنبال میکند و آنها را با خطوط مستقیم به هم متصل میکند، به این معنی که در صورت لزوم، میتواند از میان شبکه (مثلاً سنگها) عبور کند. این سناریو در بخش بعدی پوشش داده شده است.
RELATIVE_TO_GROUND (خط نارنجی)
این خط از زمین طبیعی (DTM) به عنوان مبنا استفاده میکند و هر نقطه را در ارتفاع مشخص شده بالاتر از آن سطح زمین قرار میدهد.
از نظر فنی، این حالت از DTM به عنوان مبنا استفاده میکند و مکان خطوط را در ارتفاع ذکر شده نسبت به آن قرار میدهد.
RELATIVE_TO_MESH (خط آبی)
این خط از سطح مرئی، که شامل ساختمانها و سنگها میشود، به عنوان پایه خود استفاده میکند. سپس هر نقطه را در ارتفاع مشخص شده بالای آن شبکه قرار میدهد و به طور مؤثر شکل خط را در رابطه با منظره مرئی تکرار میکند.
از نظر فنی، این حالت از شبکه (DSM) به عنوان مبنا استفاده میکند و مکانها را در ارتفاع مشخصشده بالاتر از آن قرار میدهد، بسته به شبکه، خط ممکن است با توجه به ویژگیهای مختلف روی زمین تغییر کند.
وقتی ارتفاع برای خطوط مشخص نشده باشد
حال، همان مختصات خط را بدون هیچ ارتفاعی مشخص شده در نظر میگیریم:
const lineCoords = [
{ lat: 51.1786, lng : -1.8266 },
{ lat: 51.1787, lng : -1.8264 },
{ lat: 51.178778, lng : -1.826354 },
{ lat: 51.178815, lng : -1.826275 },
{ lat: 51.178923, lng : -1.825980 },
{ lat: 51.1791, lng : -1.8258 },
{ lat: 51.1792, lng : -1.8257 }
];
در این سناریو، که هیچ ارتفاعی ارائه نشده است، خطوط اغلب در مکانهای مشابهی ظاهر میشوند. خطوط سفید، نارنجی و بنفش ممکن است در یک خط واحد (نارنجی، همانطور که معمولاً آخر رسم میشود) ادغام شوند زیرا همه آنها به طور پیشفرض در موقعیت مشابه سطح زمین قرار دارند. میتوانید این را در زیر مشاهده کنید:

خط آبی ( RELATIVE_TO_MESH ) دوباره از مش (DSM) به عنوان مبنا استفاده میکند. از آنجایی که هیچ ارتفاعی مشخص نشده است، فقط نقاط را مستقیماً روی مش قرار میدهد. لازم به ذکر است که خط را روی مش قرار نمیدهد، بلکه نقاط مشخص شده روی مش را با اتصالات مستقیم به هم متصل میکند. اگرچه این ممکن است در برخی مثالها قابل قبول به نظر برسد، اما وقتی توسط ویژگیهای دیگر پوشانده شود، میتواند باعث ایجاد مشکلات دید شود. این موضوع در بخش بعدی بررسی خواهد شد.
تعامل مشها و خطوط. حالا میتوانیم به یک چندخطی دیگر نگاه کنیم. این تصویر در همان منطقه است اما پوشش زمینی بیشتری دارد (یا جزئیات بیشتری در DSM روی DTM).
const lineCoords = [
{ lat: 51.188404, lng: -1.779059, altitude: 70.69 },
{ lat: 51.187955, lng: -1.780143, altitude: 77.25 },
{ lat: 51.187658, lng: -1.781552, altitude: 68.97 },
{ lat: 51.187376, lng: -1.782447, altitude: 99.02 },
{ lat: 51.186912, lng: -1.783692, altitude: 104.35 },
{ lat: 51.185855, lng: -1.788368, altitude: 86.91 },
];
وقتی نمایش را با استفاده از همان روشها (و رنگهای) قبلی میبینیم، این نما را میبینیم:

بنفش CLAMP_TO_GROUND است که میتوانید آن را در امتداد زمین ببینید. سفید ABSOLUTE است که میتوانید ببینید خطوط مستقیم نقاطی را که کاملاً در فضا قرار گرفتهاند به هم متصل میکنند. با توجه به اینکه نارنجی و آبی نسخههای نسبی هستند، چه در مورد سطح (DTM) و چه در مورد مش (DSM)، توجه داشته باشید که خط آبی به دلیل ارتفاع عوارض زیر، از نظر شکل کمی متفاوت است.
دوباره میتوانیم توجه کنیم که ماهیت ایجاد خط به این معنی است که خط از میان مش عبور میکند زیرا نقاط توسط خطوط مستقیم به هم متصل میشوند. این سناریو ممکن است در دیدن خطوط مشکل ایجاد کند، بنابراین میتوانید drawsOccludedSegments را روی true تنظیم کنید تا مطمئن شوید که خط از میان درختان قابل مشاهده است، همانطور که با جزئیات بیشتر در تصویر زیر نشان داده شده است، جایی که خطوط عبوری از مش هنوز قابل مشاهده هستند.

ماهیت موقعیتیابی در فضا به این معنی است که نقاط ممکن است درون شبکه قرار گیرند و همچنین خطوطی که نقاط را به هم متصل میکنند نیز ممکن است درون شبکه قرار گیرند و به طور بالقوه باعث ایجاد مصنوعات بصری شوند. در بخش زیر خواهیم دید که چگونه میتوان چنین مصنوعاتی را در صورت امکان بهبود بخشید.
حل مسائل مربوط به تعامل بین خطوط و عوارض زمین
در مثالی دیگر، در همان منطقه، میتوانیم برخی آثار باستانی دیگر را ببینیم که باید هنگام استفاده از حالتهای ارتفاع خاص از آنها آگاه باشیم.
در اینجا ما یک منطقه نسبتاً مسطح داریم که عمدتاً در سطح DTM است و جزئیات اضافی محدودی در بالای آن در مش وجود دارد. این سناریو همچنین در منطقهای که هیچ پوشش سهبعدی در بالای مدل زمین ندارد، صادق است. بیایید نگاهی به مکان زیر بیندازیم، همانطور که در زیر مشخص شده است:
const lineCoords = [
{ lat: 51.194642, lng: -1.782636, altitude: 99.10 },
{ lat: 51.193974, lng: -1.783952, altitude: 99.86 },
{ lat: 51.192203, lng: -1.787175, altitude: 96.14 },
{ lat: 51.190024, lng: -1.790250, altitude: 105.92 },
{ lat: 51.187491, lng: -1.793580, altitude: 102.60 },
{ lat: 51.183690, lng: -1.798745, altitude: 95.69 },
];
و در تصویر دیده میشود که خطوط همان رنگ قبلی را دارند: (سفید: ABSOLUTE، آبی: RELATIVE_TO_MESH، بنفش: CLAMP_TO_GROUND، نارنجی: RELATIVE_TO_GROUND).

در اینجا میتوانیم تعدادی از مصنوعات را ببینیم، اولین مورد این است که به دلیل عدم پوشش سطحی، خطوط نارنجی (RELATIVE_TO_GROUND) و آبی (RELATIVE_TO_MESH) (عمدتاً) در یک مکان قرار دارند (و خط آبی در آخرین مرحله رسم نشان داده شده است).
همچنین میتوانیم ببینیم که خط بنفش (CLAMP_TO_GROUND) زمین را دنبال میکند و روی تپه دیده میشود، در حالی که خط سفید (ABSOLUTE) را میتوان در تپه ناپدید شده دید زیرا فقط نقاط به هم متصل هستند و خطوط مستقیم از زمین عبور میکنند.
شما میتوانید این را به طور خاص در این تصویر، زمانی که خط بنفش پنهان شده است، مشاهده کنید.

بنابراین، این میتواند منجر به برخی مصنوعات بصری عجیب شود، که در آن میتوان دید که خط در زیر زمین (یا حتی از طریق شبکه) ناپدید میشود، زیرا خط بین نقاط فقط یک مسیر مستقیم را دنبال میکند. شما ممکن است بتوانید با اضافه کردن نقاط بیشتر بین خطوط از طریق استفاده از یک روش درونیابی، نمایش بصری چنین خطی را بهبود بخشید، اما اینکه چگونه این امر ممکن است بر تصویر تأثیر بگذارد، دوباره به روش مورد استفاده بستگی دارد:
- برای اندازهگیریهای نسبی (RELATIVE_TO_GROUND یا RELATIVE_TO_MESH) : هنگام استفاده از مقادیر ارتفاع نسبی، ایجاد نقاط بیشتر در امتداد یک خط یا چندضلعی، امکان قرار دادن عارضه در سطح مناسبتر و تطابق بهتر با پروفیل ارتفاع را فراهم میکند. اگر این نقاط واسطه در دادههای شما وجود ندارند، میتوانید از یک تابع درونیابی، مانند تابع Interpolate در کتابخانه هندسه پلتفرم نقشههای گوگل، برای اضافه کردن آنها استفاده کنید. سپس میتوان به این نقاط جدید مقادیر نسبی داد که در بالای پروفیل ارتفاع مربوطه قرار میگیرند و سپس طول هر خطی که نقاط را به هم متصل میکند محدود شده و نمایش بصری بهبود مییابد.
- برای عوارض مطلق (ABSOLUTE) : برای عوارض مطلق، نقاط بیشتری باید مقادیر ارتفاع واقعی داشته باشند. درونیابی بین مقادیر مطلق موجود، نقطهای را که به طور دقیق منعکس کننده هر مقداری در بالای مش باشد، ارائه نمیدهد، زیرا صرفاً میانگینی بین نقطه A و نقطه B خواهد بود.
خلاصه
امیدوارم این سند، مرور جامعی از گزینههای AltitudeMode در نقشههای سهبعدی واقعگرایانه ارائه داده باشد و جزئیات چگونگی تأثیر ABSOLUTE، CLAMP_TO_GROUND، RELATIVE_TO_GROUND و RELATIVE_TO_MESH را بر قرارگیری و رندر ویژگیهای مختلف مانند نشانگرها، خطوط و چندضلعیها شرح داده باشد.
درک چگونگی عملکرد این حالتها به همراه مدل رقومی زمین (DTM) و مدل رقومی سطح (DSM) برای ایجاد نمایشهای نقشه سهبعدی دقیق و از نظر بصری جذاب با حداقل مصنوعات بصری بسیار مهم است.
ما امیدواریم که شما این حالتهای ارتفاع را در پروژههای خود آزمایش کنید تا از پتانسیل کامل نقشهبرداری سهبعدی بهرهمند شوید و تجربیات جذاب و فراگیری را برای کاربران خود ایجاد کنید و بازخورد خود را ارائه دهید.
مشارکتکنندگان
مت تون | مهندس راهکارها، توسعهدهنده ژئو