نحوه تبدیل PDF به ESRI Shapefile با Python
در دوران مدرن سازمان ها و نهادها داده های زیادی را ثبت می کنند، و نرم افزار محاسباتی می تواند با تعداد زیادی از داده ها کار کنند، اما مطمئناً ما نتوانسته ایم داده ها را ذخیره کنیم. ما گزارش هایی را منتشر می کنیم، جدول ها و نقشه ها را ایجاد می کنیم، اما بیشتر از حفظ داده هایی که شخص دیگری می تواند آنرا بررسی کند و در مطالعه خود یا مجدداً تجزیه و تحلیل کند، بیشتر به ارائه نظرات و ارزیابی ها متمرکز شده ایم.
داده های مکانی بردار نوعی از داده هاست که با نقاط، خط و چند ضلعی همراه با اطلاعات توصیفی هر یک مرتبط است. برای اینکه مقدار کاملی از این داده های مکانی ارائه شود ، باید در استانداردهای ویژه OGC ،ESRI Shapefiles ،GeoJson ،Klm ،NetCDF، در بانک های اطلاعاتی تجاری / منبع باز، در مخازن وب ذخیره شود. با این حال ، بیشتر اوقات اختلال و منابع محدود مؤسسات دولتی / خصوصی باعث می شود که داده ها فقط در گزارش های موجود در نسخه دیجیتالی (به صورت PDF) و حتی به صورت گزارش های مبتنی بر کاغذ در دسترس باشد.
برای استفاده از داده های مکانی ارائه شده در گزارش، به روش هایی نیاز داریم تا داده ها به روش مؤثر استخراج شود. میزان ابزارها و تکنیک ها کاملاً پیشرفته بوده و برای مراحل خاص به چندین نرم افزار منبع باز نیاز است. ما یک آموزش کامل با تمام مراحل مورد نیاز برای استخراج داده های مکانی وکتور نقشه گزارش شده به صورت PDF را در یک shapefile ESRI انجام داده ایم. برای این آموزش ما از Inkscape برای تبدیل PDF به DXF ،QGIS استفاده کرده ایم تا برخی از اطلاعاتDXF ، Python و Geopandas را در یک جلسه آزمایشگاه Jupyter برای ترجمه و مقیاس گذاری فضایی استخراج کنیم.
داده های ورودی
می توانید داده های مورد نیاز این آموزش را از اینجا بارگیری کنید.
دانلود کد پایتون از اینجا
%matplotlib inline
import matplotlib.pyplot as plt
import geopandas as gpd
#open the DXF file
plano = gpd.read_file('../Pdf/Plano_Ccamacmayo.dxf')
plano.plot(figsize=(20,40))
partialTranslation=plano.translate(261.75756,-149.51527,0)
partialTranslation.plot(figsize=(20,40))
plt.grid()
scale = 4500/509.931 #1/193.11
geometryScaled = partialTranslation.scale(scale,scale,1, origin=(0,0,0)) #-261.75756,149.41021-261.66994,
geometryTranslated = geometryScaled.translate(249000, 8350500,0) #30.24975, 99.84579
geometryTranslated.plot(figsize=(20,40))
plt.grid()
#apply the new geometry to the geopandas dataframe and apply the EPSG cpde
plano = gpd.GeoDataFrame(plano, geometry=geometryTranslated)
plano.crs = {'init':'epsg:24789'}
plano.plot(figsize=(20,40))
#filter only the line elements
planoLines = plano[plano.geometry.type=='LineString']
#export the spatial as shapefile
planoLines.to_file('../Shps/Dxf_Total.shp')
آموزش
به زودی
شناسه تلگرام مدیر سایت: SubBasin@
نشانی ایمیل: behzadsarhadi@gmail.com
(سوالات تخصصی را در گروه تلگرام ارسال کنید)
_______________________________________________________
پروژه تخصصی در لینکدین
نظرات (۰)