وقتی ارتفاع را برای ویژگیها در یک نقشه سهبعدی مشخص میکنید - مانند خطوط، چند ضلعیها، مدلها یا نشانگرها - عوامل متعددی وجود دارند که میتوانند بر محل قرارگیری آنها تأثیر بگذارند، هم در داخل صحنه و هم در نحوه تعامل رندر صحنه با آن ویژگی. این سند استفاده از "AltitudeMode" در نقشه سه بعدی و نحوه مدیریت ارتفاع برای ویژگی ها را پوشش می دهد.
در اینجا نحوه استفاده از AltitudeMode
با تعدادی از انواع ویژگی آورده شده است:
نشانگرها: Marker3DElement ، Marker3DIinteractiveElement
یک ارتفاع در محل و همچنین اکستروژن را مشخص کنید.
مدلها: Model3DElement ، Model3DIinteractiveElement
یک ارتفاع در نقطه لنگر مدل مشخص کنید، که باید با جهت گیری آن برای موقعیت مناسب در صحنه استفاده شود.
Polylines: Polyline3DElement ، Polyline3DIinteractiveElement
نحوه اعمال ارتفاع به نقاط موقعیت در امتداد چند خط را مشخص کنید.
چند ضلعی: Polygon3DElement ، Polygon3DInteractiveElement
نحوه اعمال ارتفاع به نقاط موقعیت در امتداد یک چندضلعی را مشخص کنید.
نحوه استفاده از ارتفاع در محیط های سه بعدی
هنگام قرار دادن نقاط در یک صحنه سه بعدی، موقعیت نهایی آنها تحت تأثیر وجود ساختمان های سه بعدی یا اشیایی مانند درختان است. درک دو مفهوم کلیدی بسیار مهم است:
- مدل زمین دیجیتال (DTM) : این نشان دهنده ارتفاع "زمین برهنه" است. آن را به عنوان شکل طبیعی زمین بدون هیچ ساختمان، درخت یا سازه دیگری در بالا در نظر بگیرید. همه نواحی توسط DTM، که اساس ارتفاع کره زمین را تشکیل می دهد (با استفاده از EGM96 محاسبه می شود) پشتیبانی می شوند.
- مدل سطح دیجیتال (DSM) : این نشان دهنده ارتفاع "سطح بالایی" از جمله ساختمان ها، درختان و سایر سازه ها است. در مناطقی که ویژگیها ثبت شدهاند (به ویژه محیطهای شهری که ساختمانها بر منظره غالب هستند)، سطح قابل مشاهده بالاتر از زمین پایه ظاهر میشود.
تمایز بین DTM و DSM برای درک نحوه تعامل حالتهای ارتفاع مختلف با این مدلهای ارتفاعی دیجیتال (DEMs) حیاتی است، زیرا قرارگیری ویژگیها ممکن است تحتتاثیر مدل سطح قرار گیرد. در نمودار زیر می توانید تفاوت ها را مشاهده کنید:
هنگامی که ویژگی ها فاقد داده ارتفاع هستند
اگر دادههایی دارید که فاقد اندازهگیری ارتفاع هستند یا هنگام استفاده از دادههای سرویس Google دیگر، مانند سرویسهای مسیرها یا مکانها، اغلب هیچ ارتفاعی در هندسه بازگشتی ارائه نمیشود. در چنین مواردی، قرار دادن ویژگی در صحنه مستلزم این است که یک AltitudeMode
با دقت انتخاب کنید:
- آن را به زمین بچسبانید : ساده ترین روش، که در آن ویژگی به طور خودکار با زمین مطابقت دارد. این حالت از مدل DTM استفاده می کند.
- یک ارتفاع دلخواه + حالت نسبی به آن بدهید : میتوانید ارتفاع انتخابی را تعیین کنید و سپس از RELATIVE_TO_GROUND (که ویژگیها را نسبت به مدل DTM قرار میدهد) یا RELATIVE_TO_MESH (که آنها را در بالای مدل DSM شناور میکند) استفاده کنید.
- از سرویس دیگری برای به دست آوردن ارتفاع استفاده کنید : برای ارتفاع دقیق DTM در محل این ویژگی، می توانید از سرویسی مانند Google Maps Platform Elevation API استفاده کنید. اگر یک خط یا چند ضلعی است، باید این کار را برای هر یک از نقاط تشکیل دهنده خط یا چندضلعی انجام دهید.
گزینه های AltitudeMode
به چه معنا هستند و چه زمانی از آنها استفاده کنیم؟
چهار گزینه AltitudeMode
وجود دارد که می توانید هنگام تعریف یک ویژگی مشخص کنید:
مطلق
هواپیمایی را تصور کنید که در ارتفاع خاصی از سطح دریا پرواز می کند، مثلاً 10000 فوت. ارتفاع آن ثابت است، فرقی نمی کند بر فراز کوه یا دره پرواز کند.
نحوه استفاده : ارتفاع جسم نسبت به میانگین سطح دریا (محاسبه شده با استفاده از EGM96) بیان می شود. مختصات ارتفاع این ویژگی به عنوان یک ارتفاع دقیق از سطح متوسط دریا تفسیر می شود.
زمان استفاده از آن : برای ویژگی هایی با ارتفاعات مشخص و دقیق، مانند مسیرهای پرواز، اشیاء غوطه ور با عمق دقیق، یا ابزارهای علمی نقطه ثابت.
CLAMP_TO_GROUND
به این فکر کنید که یک پتوی پیک نیک را مستقیماً در دامنه تپه قرار دهید. مهم نیست که تپه چقدر شیب دار یا مسطح باشد، پتو همیشه روی سطح قابل مشاهده صاف قرار می گیرد.
نحوه استفاده : ارتفاع جسم به صورت قرارگیری مستقیم روی زمین بیان می شود. آنها بدون توجه به هر مقدار ارتفاع ارائه شده، به دنبال زمین در سطح زمین باقی خواهند ماند. مختصات ارتفاع ویژگی نادیده گرفته می شود. مستقیماً بر روی سطح زمین (DTM) پخش می شود.
زمان استفاده از آن : برای ویژگی هایی که همیشه باید با زمین مطابقت داشته باشد، مانند جاده ها، حصارها، مسیرها، مرزهای دارایی یا پایه ساختمان ها.
RELATIVE_TO_GROUND
یک بالون هوای گرم را تصور کنید که 100 متر بالاتر از ارتفاع طبیعی زمین (DTM) زیر آن قرار دارد. اگر زمین بالا برود، بالون با آن بالا می رود و فاصله 100 متری از "زمین برهنه" را حفظ می کند.
نحوه استفاده : ارتفاع جسم نسبت به سطح زمین (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 (پین سفید)
این پین از مقدار دقیق ارتفاع (102.23 متر) برای قرار دادن نشانگر در آن ارتفاع بالاتر از سطح دریا (EGM96) استفاده می کند، که بر روی یکی از سنگ های استون هنج همانطور که توسط ارتفاع ارائه شده آن مشخص شده است ظاهر می شود.
از نظر فنی، این حالت از مقدار واقعی ارتفاع عرضه شده برای قرار دادن پین در ارتفاع مشخص شده از سطح دریا استفاده می کند که در این مثال محل استون هنج است، اما در بالای یکی از سنگ ها.
RELATIVE_TO_GROUND (پین نارنجی)
این پین زمین (DTM) را به عنوان پایه خود می گیرد و خود را در 102.23 متر بالاتر از سطح زمین قرار می دهد و به نظر می رسد که در بالای زمین طبیعی که زیر سنگ در هنج قرار دارد شناور است.
از نظر فنی، این حالت پایه خود را در سطح DTM واقعی روی زمین قرار می دهد و سپس پین را در 102.23 متر بالای آن قرار می دهد.
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 }
];
می توانید این خط را با استفاده از موقعیت مطلق در تصویر زیر به رنگ سفید مشاهده کنید.
یک بار دیگر، تصویر زیر خطوط را با استفاده از حالت های مختلف ارتفاع نشان می دهد. اجازه دهید هر کدام را به نوبه خود از پایین ترین به بالاترین بحث کنیم.
CLAMP_TO_GROUND (خط بنفش)
این خط ارتفاع مشخص شده برای هر نقطه را نادیده می گیرد و به جای آن خط را مستقیماً روی زمین زیرین (DTM) "پرده" می کند. زمین را دنبال می کند، بدون توجه به وجود هر گونه ویژگی مانند ساختمان ها یا سنگ ها در بالای آن.
از نظر فنی، این حالت مقادیر واقعی ارتفاع را نادیده میگیرد و خط را روی DTM میپوشاند، زمین زیرین را دنبال میکند و مش ویژگیهای بالای آن را نادیده میگیرد.
ABSOLUTE (خط سفید)
این خط از ارتفاع دقیق برای هر نقطه استفاده می کند و باعث می شود که خط از روی برخی از سنگ ها عبور کند. با خطوط مستقیمی بین هر نقطه به هم متصل می شود، که گاهی اوقات می تواند باعث شود که اگر نقاط به اندازه کافی مکرر نباشند، از اجسام عبور می کند.
از نظر فنی، این حالت از ارتفاع مشخص شده برای هر نقطه پیروی می کند و آنها را با خطوط مستقیم به هم وصل می کند، به این معنی که اگر مقادیر ارتفاع دیکته کنند می تواند از مش (به عنوان مثال: سنگ ها) عبور کند. این سناریو در بخش بعدی پوشش داده شده است.
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 است که می توانید آن را در امتداد زمین ببینید. سفید مطلق است، که می توانید ببینید که خطوط مستقیم نقاطی را که کاملاً در فضا قرار گرفته اند به هم متصل می کنند. با توجه به اینکه نارنجی و آبی نسخههای نسبی SURFACE (DTM) یا MESH (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، برای اضافه کردن آنها استفاده کنید. سپس می توان به این نقاط جدید مقادیر نسبی داد که در بالای مشخصات ارتفاع مربوطه قرار می گیرند و سپس طول هر خطی که به نقاط متصل می شود محدود می شود و نمایش بصری بهبود می یابد.
- برای ویژگیهای مطلق (ABSOLUTE) : برای ویژگیهای ABSOLUTE، نقاط بیشتری باید دارای مقادیر واقعی ارتفاع باشند. درون یابی بین مقادیر مطلق موجود، نقطه ای را به دست نمی دهد که به طور دقیق هر مقداری را در بالای شبکه منعکس کند، زیرا صرفاً یک میانگین بین نقطه A و نقطه B است.
خلاصه
امیدواریم که این سند یک نمای کلی از گزینههای AltitudeMode
در نقشههای سهبعدی فوتورئالیستی را به شما ارائه کرده باشد، و به شما توضیح دهد که چگونه ABSOLUTE، CLAMP_TO_GROUND، RELATIVE_TO_GROUND، و RELATIVE_TO_MESH بر قرارگیری و ارائه ویژگیهای مختلف مانند نشانگرها، خطوط و چندضلعیها تأثیر میگذارند.
درک نحوه کار این حالتها با مدل زمین دیجیتال (DTM) و مدل سطح دیجیتال (DSM) برای ایجاد نمایشهای نقشه سهبعدی دقیق و متقاعدکننده با حداقل مصنوعات بصری بسیار مهم است.
امیدواریم این حالتهای ارتفاع را در پروژههای خود آزمایش کنید تا پتانسیل کامل نقشهبرداری سهبعدی را باز کنید و تجربههای جذاب و همهجانبهای را برای کاربران خود ایجاد کنید و بازخورد ارائه دهید.
مشارکت کنندگان
مت تون | مهندس راه حل، توسعه دهنده ژئو