آماگ
۲۲ مهر ۱۴۰۴، ۱۰:۲۱

آیا اگر فقط فایل shp داشته باشم می‌توانم کادر محاطی (bounding box) را به دست آورم؟

آیا فایل .shp بدون dbf، .shx، .prj یا موارد دیگر برای به دست آوردن کادر محاطی کافی است؟ من تلاش می‌کنم به کاربر اجازه دهم شکل‌فایل‌های خود را در یک صفحه وب بارگذاری کند. می‌خواهم طول و عرض جغرافیایی را از شکل‌فایل نقطه‌ای و کادر محاطی (طول، عرض، طول، عرض) را از شکل‌فایل چندضلعی به دست بیاورم (هر دو شکل‌فایل حاوی یک شکل/عرضه (feature) واحد خواهند بود). دوست دارم فکر کنم فایل .shp برای به دست آوردن شکل کافی است، اما وقتی از fiona استفاده می‌کنم، خطا می‌دهد. آیا بسته‌ای وجود دارد که بتواند کمک کند؟ کد به این شکل است: import fiona from shapely.geometry import shape shp_file = 'a_polygon_shapefile.shp' c = fiona.open(shp_file) # first record first_shape = c.next() box_topY = shape(first_shape['geometry']).bounds[3] box_bottomY = shape(first_shape['geometry']).bounds[1] box_rightX = shape(first_shape['geometry']).bounds[2] box_leftX = shape(first_shape['geometry']).bounds[0] خطایی که می‌گیرم این است: Unable to open a_polygon_shapefile.shx or a_polygon_shapefile.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it

پاسخ‌ها (2)

۲۲ مهر ۱۴۰۴، ۱۱:۲۱
از نظر فنی، طبق کاغذ سفید (white paper) شکل‌فایل، صفحه 4، می‌توانید کادر محاطی را فقط از فایل اصلی .shp به دست آورید. مقادیر کادر محاطی در بایت‌های زیر در هدر فایل .shp قرار دارند.
... بایت 36 کادر محاطی Xmin Double Little بایت 44 کادر محاطی Ymin Double Little بایت 52 کادر محاطی Xmax Double Little بایت 60 کادر محاطی Ymax Double Little بایت 68* کادر محاطی Zmin Double Little بایت 76* کادر محاطی Zmax Double Little بایت 84* کادر محاطی Mmin Double Little بایت 92* کادر محاطی Mmax Double Little از سوی دیگر، همان‌طور که در نظرات اشاره شد، مگر اینکه دانش بیرونی درباره سیستم مختصات داشته باشید، که باید در فایل .prj موجود باشد، نمی‌توانید از مقادیر کادر محاطی استفاده کنید. اگر بدانید چگونه یک فایل باینری را بخوانید، مثلاً با برنامه‌نویسی C یا زبان دیگری، به راحتی می‌توانید خود کادر محاطی را با استفاده از آفست‌های بالا استخراج کنید.