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

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

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

بیایید نگاهی بیندازیم به اینکه چگونه AltitudeMode مختلف بر موقعیتیابی نشانگر در ترتیب صعودی ارتفاع تأثیر میگذارد.
CLAMP_TO_GROUND (سنجاق بنفش)
این سنجاق مقدار ارتفاع را نادیده میگیرد و خود را به نزدیکترین ارتفاع زمین متصل میکند. میتوانید آن را درست زیر سنجاق سفید ببینید، که بهطور مؤثری به زمین «چسبیده» است.
از نظر فنی، این حالت ارتفاع واقعی را نادیده میگیرد و سنجاق را به نزدیکترین ارتفاع DTM میچسباند.
ABSOLUTE (سنجاق سفید)
این سنجاق از مقدار دقیق ارتفاع (۱۰۲٫۲۳ متر) برای قرار دادن نشانگر در آن ارتفاع از سطح دریا (EGM96) استفاده میکند و همانطور که ارتفاع ارائهشده مشخص میکند، در بالای یکی از سنگهای استونهنج ظاهر میشود.
از نظر فنی، این حالت از مقدار ارتفاع واقعی ارائهشده برای قرار دادن سنجاق در ارتفاع مشخصشده از سطح دریا استفاده میکند که در این مثال، مکان استونهنج است، اما در بالای یکی از سنگها.
RELATIVE_TO_GROUND (سنجاق نارنجی)
این سنجاق زمین (DTM) را بهعنوان پایه خود درنظر میگیرد و خود را ۱۰۲٫۲۳ متر بالاتر از آن سطح زمین قرار میدهد، بهطوریکه بهنظر میرسد بالای زمین طبیعی که زیر سنگ در سازه سنگی است شناور است.
ازنظر فنی، این حالت پایه خود را روی سطح DTM واقعی روی زمین تنظیم میکند و سپس پین را در ارتفاع ۱۰۲٫۲۳ متری بالای آن قرار میدهد.
RELATIVE_TO_MESH (سنجاق آبی)
این سنجاق از سطح قابلمشاهده (DSM) بهعنوان پایه خود استفاده میکند و خود را ۱۰۲٫۲۳ متر بالاتر از آن سطح قرار میدهد. این حالت ارتفاع سنگ را در اندازهگیریاش لحاظ میکند، و آن را کمی بالاتر از سنجاق نارنجی تراز میکند.
از نظر فنی، این حالت از مش (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 }
];
میتوانید این خط را که در تصویر زیر با رنگ سفید نشان داده شده است بااستفاده از موقعیتیابی مطلق ببینید.

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

CLAMP_TO_GROUND (خط بنفش)
این خط ارتفاع مشخصشده برای هر نقطه را نادیده میگیرد و درعوض خط را مستقیماً روی زمین زیرین (DTM) «میپوشاند». این خط از عوارض زمین پیروی میکند و وجود هرگونه عارضه مانند ساختمان یا سنگ را در بالای آن نادیده میگیرد.
از نظر فنی، این حالت مقادیر ارتفاع واقعی را نادیده میگیرد و خط را روی DTM میکشد، زمین زیرین را دنبال میکند و مش ویژگیهای بالای آن را نادیده میگیرد.
ABSOLUTE (White Line)
این خط از ارتفاع دقیق هر نقطه استفاده میکند، که باعث میشود خط از روی برخی سنگها عبور کند. این مسیر با خطوط مستقیم بین هر نقطه متصل میشود، که گاهی اوقات اگر نقاط به اندازه کافی نزدیک نباشند، ممکن است به نظر برسد که از میان اشیاء عبور میکند.
ازنظر فنی، این حالت از ارتفاع مشخصشده برای هر نقطه پیروی میکند و آنها را با خطوط مستقیم به هم متصل میکند، یعنی اگر مقادیر ارتفاع حکم کند، میتواند از مش (مثلاً سنگها) عبور کند. این سناریو در بخش بعدی پوشش داده شده است.
RELATIVE_TO_GROUND (خط نارنجی)
این خط از زمین طبیعی (DTM) بهعنوان پایه خود استفاده میکند و هر نقطه را در ارتفاع مشخصشده بالای آن سطح زمین قرار میدهد.
ازنظر فنی، این حالت از DTM بهعنوان پایه استفاده میکند و مکانهای خط را در ارتفاع فهرستشده نسبتبه آن قرار میدهد.
RELATIVE_TO_MESH (Blue Line)
این خط از سطح قابلمشاهده، که شامل ساختمانها و سنگها میشود، بهعنوان پایه خود استفاده میکند. سپس هر نقطه را در ارتفاع مشخصشده بالای آن مش قرار میدهد، و بهطور مؤثری شکل خط را در رابطه با چشمانداز نمایان تکرار میکند.
ازنظر فنی، این حالت از مش (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 است که میتوانید آن را در امتداد زمین ببینید. سفید مطلق است، که میتوانید ببینید خطوط مستقیم نقاطی را که بهطور مطلق در فضا قرار گرفتهاند به هم وصل میکنند. با نسخههای نسبی نارنجی و آبی درباره «سطح» (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 در کتابخانه هندسه Google Maps Platform، برای افزودن آنها استفاده کنید. سپس میتوان به این نقاط جدید مقادیر نسبی داد که بالای نمایه ارتفاع مربوطه قرار میگیرند و سپس طول هر خطی که به نقاط میپیوندد محدود میشود و نمایش تصویری بهبود مییابد.
- برای ویژگیهای مطلق (ABSOLUTE): برای ویژگیهای ABSOLUTE، نقاط بیشتری باید مقادیر ارتفاع واقعی داشته باشند. درونیابی بین مقادیر مطلق موجود، نقطهای را ارائه نمیدهد که بهطور دقیق هر مقداری را بالاتر از مش منعکس کند، زیرا صرفاً میانگینی بین نقطه الف و نقطه ب خواهد بود.
خلاصه
امیدواریم این سند نمای کلی جامعی از گزینههای AltitudeMode در Photorealistic 3D Maps ارائه کرده باشد و جزئیات تأثیر ABSOLUTE، CLAMP_TO_GROUND، RELATIVE_TO_GROUND، و RELATIVE_TO_MESH را بر جایگذاری و پرداخت ویژگیهای مختلف مانند نشانگرها، خطوط، و چندضلعیها شرح داده باشد.
درک نحوه عملکرد این حالتها در کنار «مدل دیجیتال زمین» (DTM) و «مدل دیجیتال سطح» (DSM) برای ایجاد نمایشهای نقشه سهبعدی دقیق و جذاب ازنظر بصری با حداقل مصنوعات بصری بسیار مهم است.
امیدواریم این حالتهای ارتفاع را در پروژههای خودتان امتحان کنید تا از تمام پتانسیل نقشهبرداری سهبعدی بهره ببرید و تجربههای جذاب و فراگیری برای کاربران خود ایجاد کنید و بازخورد ارائه دهید.
همیاران
مت تون | مهندس راهحلها، توسعهدهنده جغرافیایی