أكثر

استخدام مجموعات Geometry مع Fiona لكتابة إخراج النقاط المتعددة والنقاط؟


أتلقى الخطأ التالي في هذه الوظيفة:

ValueError: نوع الشكل الهندسي للسجل لا يتطابق مع النوع الهندسي لمخطط المجموعة: 'Point'! = 'MultiPoint'

المشكلة هي أن لدي نقاط متعددة مختلطة بالنقاط العادية. عندما أحاول كتابة النواتج في أحصل على مشكلة تشويش في المخطط

السجل الذي يتسبب في حدوث مشكلات في "output.write" هو هذا (ملاحظة: بالنسبة إلى MultiPoint ، لا يحتوي إلا على x ، y واحد):

{'الهندسة': {'type': 'MultiPoint'، 'الإحداثيات': [(13531245.475704141، 2886003.2689278126)]}، 'type': 'Feature'، 'id': '0'، 'properties': OrderedDict ([ (u'H20Status '، u'Fair')])}

عندما أذهب:

إذا كان geom ['type'] == 'MultiPoint': # قم بتقسيم النقاط المتعددة إلى نقاط # أي  بالنسبة إلى pt في my_shape: pt = self.move_point (نقطة ، قارن ، توزيع)

"pt" تصبح "نقطة":

POINT (13531245.47570414 2886003.268927813)

ثم عندما أحاول إعادة كتابته إلى ما كان عليه (نقطة متعددة):

# الكتابة إلى outfile - WHERE EVERYTHING FAILS output.write ({'geometry': mapping (pt)، 'properties': item ['properties']})

أحصل على هذا:

ValueError: نوع الشكل الهندسي للسجل لا يتطابق مع النوع الهندسي لمخطط المجموعة: 'Point'! = 'MultiPoint'

إذا حاولت إعادة كتابة 'pt' إلى 'MultiPoint' قبل عملية الكتابة (ومرة أخرى ، هذا هو متعدد النقاط مع مجموعة إحداثيات واحدة) مثل ذلك ،

mpoint = متعدد النقاط (pt)

أحصل على هذا:

ملف "C:  Python27  lib  site -pack  shapely  geometry  multipoint.py" ، السطر 143 ، في geos_multipoint_from_py تأكيد len (array ['shape']) == 2 AssertionError

* كود العمل الكامل بعد المساعدة منgene وVince *

def process_file (self، in_file، out_file، Compar_file، dist): # فتح ملف الإدخال وقارن الملف # حلقة فوق كل منها مع fiona.open (in_file، 'r') كإدخال: meta = input.meta # الملف الخارجي له نفس crs ، مخطط مثل inFile with fiona.open (out_file، 'w'، ** meta) كإخراج: مع fiona.open (قارن_الملف ، 'r') على سبيل المقارنة: # اقرأ الأشكال الهندسية الأنيقة من الملف # حلقة من خلال جميع الكائنات الجميلة # اكتب (عنصر) = 'ديكت' للعنصر في الإدخال: geom = عنصر ['هندسة'] my_shape = شكل (جيوم) # تحقق مما إذا كان متعدد النقاط أو نقطة إذا كانت geom ['type'] == 'MultiPoint': # تقسيم النقاط المتعددة إلى نقاط # أي  بالنسبة لـ pt في my_shape: single_point = self.move_point (pt، قارن، توزيع) mpoint = MultiPoint ([(single_point.x، single_point.y)]) mpoint_for_merge = الشكل (تعيين (mpoint)) # الكتابة إلى الملف الخارجي - أين كل شيء الآن WORKS output.write ({'geometry': mapping (mpoint_for_merge)، 'properties': item ['properties']}) elif geom ['type'] == 'Point': # return of move_point هي شكل جيوم # ie  my_shape = self.move_point (my_shape، قارن، dist) # الكتابة إلى outfile output.write ({'geometry': mapping (my_shape)، 'properties': item ['properties']}) else: رفع ValueError ('unhandled geometry اكتب: '+ repr (geom.type))

حافظ على الأشياء بسيطة ، تعد MultiPoint عبارة عن قائمة بسيطة من النقاط ويمكن الحصول على نوع الهندسة بواسطة Fiona (مفتاح ['geometry'] ['type']) من Shapely (geometry.type)

باستخدام fiona.open (in_file، 'r') كمدخل: باستخدام fiona.open (ملف المقارنة ، 'r') كمقارنة: meta = input.meta مع fiona.open (out_file، 'w'، ** meta) كمخرج : للعنصر في الإدخال: geom = item ['geometry'] my_shape = shape (geom) # تحقق مما إذا كانت نقطة متعددة إذا كانت geom ['type'] == 'MultiPoint': لـ pt في my_shape: my_shape = self.move_point (نقطة ، قارن ، توزيع) else: # النقاط my_shape = self.move_point (my_shape ، قارن ، dist)

تستطيع ايضا استخذام

إذا كان my_shape.type == 'MultiPoint':

جديد

مشكلتك هي تحويل نقطة إلى متعددة النقاط. مع Shapely ، تحتاج إلى استخدام إحداثيات النقطة وليس النقطة نفسها (انظر مجموعات النقاط)

Multi = MultiPoint ([(13531245.475704141 ، 2886003.2689278126)]) طباعة Multi MULTIPOINT (13531245.47570414 2886003.268927813) نقطة = متعدد [0] نقطة طباعة POINT (13531245.47570414 2886003.268927813)

الآن ، لا يمكنك استخدامmpoint = متعدد النقاط (نقطة)لكن

mpoint = MultiPoint ([(point.x، point.y)]) تعيين الطباعة (mpoint) {'type': 'MultiPoint'، 'الإحداثيات': ((13531245.475704141، 2886003.2689278126)،)} # وطباعة الشكل (تعيين (تعيين ( MULTIPOINT (13531245.47570414 2886003.268927813)

جميل: المجموعات بدون فواصل مع LineString

إنه معقد للغاية ، ولكنه قصة قصيرة: لقد استخدمت العديد من المكتبات مثل OSMNx لرسم طريق بين عدة أماكن في المدينة. الآن أود تحويله إلى ملف shp.

المسار عبارة عن قائمة مليئة بمعرف العقد. ثم تم استخدام هذه المعرفات لاستخراج خطوط الطول والعرض لكل عقدة. لقد صنعتُ tuples لتسلسل إحداثيات كل زوج من العقد (بداية واحدة ، وصول واحد) بحلقة for ، مثل هذا:

ها هي نتيجة الطباعة (الرحلة) في نهاية الحلقة:

تظهر كل مجموعة بشكل صحيح. ولكن عندما أرغب في تحويل الرحلة في LineString الجميل. ويعيد هذا:

وبالتالي ، لا يمكنني تحويله إلى shp باستخدام fiona:

-------------------------------------------------- ------------------------- TypeError Traceback (أحدث مكالمة أخيرة) في () 4> 5 ----> 6 مع fiona.open ( 'test.shp'، 'w'، 'ESRI Shapefile'، schema) مثل c: 7 c.write (<8 'geometry': mapping (trace)

/usr/local/lib/python3.5/dist-packages/fiona/فيه.py في الفتح (مسار ، وضع ، برنامج تشغيل ، مخطط ، crs ، ترميز ، طبقة ، vfs ، مشغلات ممكّنة ، crs_wkt) 173 ج = مجموعة (مسار ، وضع ، crs = crs ، سائق = سائق ، مخطط = this_schema ، 174 تشفير = ترميز ، layer = layer ، vsi = vsi ، أرشيف = أرشيف ، -> 175 enable_drivers = enabled_drivers ، crs_wkt = crs_wkt) 176 else: 177 زيادة ValueError (

/usr/local/lib/python3.5/dist-packages/fiona/collection.py in فيه(self، path، mode، driver، schema، crs، encoding، layer، vsi، archive، enabled_drivers، crs_wkt، ** kwargs) 154 elif self.mode in ('a'، 'w'): 155 self.session = WritingS Session () -> 156 self.session.start (self، ** kwargs) 157 باستثناء IOError: 158 self.session = لا شيء

fiona / ogrext.pyx في fiona.ogrext.WritingSession.start (fiona / ogrext2.c: 16207) ()

TypeError: وسيطة من النوع 'int' غير قابلة للتكرار

لا أفهم سبب تحويل المجموعات بدون فاصلة بين خط الطول وخط العرض. بالإضافة إلى ذلك ، هناك العديد من الازدواجية (الإحداثيات الثانية للسطر الثالث هي الإحداثيات الأولى للخط الرابع ، وما إلى ذلك) وربما يكون مصدر خطأ لـ shp في المستقبل.


فيونا

Fiona هي واجهة برمجة تطبيقات Vector الأنيقة والرائعة من GDAL لمبرمجي Python.

تم تصميم Fiona لتكون بسيطة ويمكن الاعتماد عليها. يركز على قراءة البيانات وكتابتها بأسلوب Python IO القياسي ويعتمد على أنواع وبروتوكولات Python المألوفة مثل الملفات والقواميس والتعيينات والمكررات بدلاً من الفئات الخاصة بـ OGR. يمكن لـ Fiona قراءة وكتابة بيانات العالم الحقيقي باستخدام تنسيقات GIS متعددة الطبقات وأنظمة ملفات افتراضية مضغوطة وتتكامل بسهولة مع حزم Python GIS الأخرى مثل pyproj و Rtree و Shapely. يتم دعم Fiona فقط في إصدارات CPython 2.7 و 3.4+.


GeometryEngine Buffer Method (IEnumerable Geometry، IEnumerable Double، Boolean)

يجب أن تحتوي الأشكال الهندسية على نفس الإسناد المكاني. يمكن أن تكون القياسات المستوية للمسافة والمساحة غير دقيقة للغاية في حالة استخدام مرجع مكاني غير مناسب. تأكد من أنك تفهم احتمالية الخطأ في الإسناد المكاني للهندسة. إذا كنت بحاجة إلى حساب نتائج أكثر دقة ، ففكر في استخدام مرجع مكاني مختلف ، أو استخدام المكافئ الجيوديسي ، BufferGeodetic (IEnumerable Geometry ، IEnumerable Double ، LinearUnit ، Double ، GeodeticCurveType ، Boolean). راجع الوثيقة مقدمة إلى المراجع المكانية لمزيد من المعلومات حول المراجع المكانية. إذا كانت unionResult صحيحة ، فستحتوي مجموعة المخرجات على نتيجة واحدة. إذا كانت الأشكال الهندسية فارغة ، يتم إرجاع مصفوفة فارغة.

تسمح هذه الطريقة بإنشاء أحجام مختلفة لهندسة الإخراج المخزن مؤقتًا لكل إدخال في ملف الهندسة على أساس القيم الموجودة في المسافات مجموعة. في معظم الظروف ، سيكون هناك تطابق واحد لواحد من المدخلات الهندسة إلى المخزن المؤقت للإدخال المسافات. ومع ذلك ، من الممكن أن يكون لديك عدد أقل من المخزن المؤقت للإدخال المسافات من المدخلات الهندسة. في هذه الحالة ، قيمة المسافة الأخيرة في المخزن المؤقت المسافات سيتم استخدام المجموعة لبقية ملفات الهندسة. في الحالة القصوى ، يمكن تحديد قيمة واحدة في المخزن المؤقت للإدخال المسافات المجموعة وهذه القيمة ستنطبق على كل المدخلات الهندسة مجموعة.

تستند المضلعات التي تم إنشاؤها من هذه الطريقة الثابتة إلى SpatialReference من هندسة الإدخال. يمثل SpatialReference مزيجًا من الشكل الإهليلجي ، والمرجع ، ونظام الإحداثيات المستخدم لعرض (المعروف أيضًا باسم المشروع) البيانات الجغرافية للأرض ثلاثية الأبعاد على سطح ثنائي الأبعاد (مثل قطعة من الورق أو شاشة كمبيوتر). يمكن العثور على مقالة جيدة لوصف كيفية عمل المرجع المكاني هنا. الشيء المهم الذي يجب معرفته حول إنشاء المخازن المؤقتة هو أن بعض المراجع المكانية أفضل من غيرها للحصول على نتائج دقيقة. للحصول على المضلعات العازلة الأكثر دقة باستخدام هذه الطريقة ، ضع في اعتبارك استخدام "منطقة حافظة" SpatialReference مثل: Albers و Lambert و Mollweide و Hammer و Sinusoidal وما شابه ذلك. إذا كانت هندسة الإدخال إلى هذه الطريقة لا تستند إلى "منطقة حافظة" جيدة SpatialReference ، فهناك خياران متاحان لإنتاج مخازن مؤقتة دقيقة: (1) استخدم المشروع (Geometry ، SpatialReference) الطريقة الثابتة لعرض الهندسة على إحداثيات النظام الأنسب للمخازن المؤقتة أو (2) استخدم BufferGeodetic (IEnumerable Geometry ، IEnumerable Double ، LinearUnit ، Double ، GeodeticCurveType ، Boolean) الطريقة الثابتة التي ستستخدم خوارزمية الإسقاط الداخلي لتحويل الهندسة إلى نظام إحداثيات كروي للحصول على الأكثر دقة ممكنة.

قم بإنشاء عدة مخازن مؤقتة فردية أو مخزن مؤقت موحد واحد حول نقاط متعددة.


استخدام مجموعات Geometry مع Fiona لكتابة إخراج النقاط المتعددة والنقاط؟ - نظم المعلومات الجغرافية

ما هي أكبر قطعة أرض في مدينة سان فرانسيسكو؟

استيعاب بيانات JSON ومعالجتها على نطاق واسع

ستتعلم في هذا البرنامج التعليمي كيفية إنشاء مجموعة StreamSets Data Collector (SDC) لاستيعاب مئات الآلاف من كائنات JSON ومعالجة كل عنصر عبر كود JavaScript وكتابة النتائج إلى Apache Hive.

تتيح بوابة البيانات المفتوحة الرسمية لمدينة ومقاطعة سان فرانسيسكو ، SF OpenData ، مئات مجموعات بيانات المدينة للاستخدام من قبل المطورين والمحللين والمقيمين وغير ذلك. تحتوي إحدى مجموعات البيانات هذه على إحداثيات مضلعة لكل جزء في المدينة - ما مجموعه 206560 سجلًا ، بتنسيق ملف شكل.

لحسن الحظ ، قام Mirco Zeiss ، المستشار في CGI في ألمانيا ، بتحويل بيانات ملف الأشكال إلى JSON ودفعها إلى مشروع GitHub ، لأنه "احتاج إلى ملف json كبير جدًا لاختبار الكود المتنوع". يمكننا استخدام SDC لقراءة بيانات JSON ، وحساب مساحة كل قطعة في مقيِّم JavaScript ، وكتابة السجلات الناتجة إلى Hive لتحليلها. على وجه التحديد ، نحن نتطلع للإجابة على السؤال ، "ما هي أكبر قطعة أرض في مدينة سان فرانسيسكو؟"

سوف تحتاج إلى ما يلي:

Hadoop - لقد استخدمت QuickStart VM لـ Cloudera Distribution Hadoop (CDH) 5.5 ، ولكن من المحتمل أن تعمل الإصدارات والتوزيعات الأخرى أيضًا. أوصي بشدة بالعمل من خلال برنامج CDH Quickstart التعليمي إذا لم تكن لديك خبرة سابقة مع Hadoop.

StreamSets Data Collector - يفترض هذا البرنامج التعليمي أنك قمت بتثبيت StreamSets في Cloudera QuickStart VM ، جنبًا إلى جنب مع CDH. راجع إدخال المدونة هذا للحصول على دليل مفيد للبدء. مرة أخرى أنا موصى بة بشدة العمل من خلال البرنامج التعليمي للتعرف على SDC.

أدوات التطوير الشائعة مثل git

قم بتنزيل بيانات JSON المصدر

تتمثل الخطوة الأولى في تنزيل بيانات JSON المصدر من GitHub. ببساطة استنساخ المشروع:

ملف citylots.json كبير - 181 ميجابايت - يحتوي على أكثر من 200000 عنصر JSON ، يمثل كل منها قطعة أرض واحدة في المدينة. فيما يلي الأسطر القليلة الأولى من الملف ، والتي تمت تهيئتها لسهولة القراءة:

الملف بأكمله عبارة عن كائن JSON واحد ، يحتوي على مجموعة من كائنات الدُفعة في خاصية ميزاته.

سنستخدم أصل دليل SDC لقراءة بيانات JSON. نظرًا لأن Directory Origin يمكن أن يقبل إما سلسلة من كائنات JSON ، أو مصفوفة JSON من العناصر ، فسنحتاج إلى معالجة البيانات مسبقًا قليلاً. لحسن الحظ ، هذه مسألة بسيطة تتمثل في حذف كل شيء قبل القوس المربع الافتتاحي الأول "[" في أعلى الملف ، وكل شيء بعد آخر قوس مربع للإغلاق "]" في نهاية الملف. ستحتاج إلى استخدام محرر قادر على التعامل مع الملفات الكبيرة جدًا. لقد استخدمت vim. احفظ الملف كملف citylots-array.json.

الآن أصبحت بيانات المصدر بالتنسيق الصحيح ، يمكنك العمل مع SDC.

  1. إذا لم تقم بتشغيل البرنامج التعليمي StreamSets ، فستحتاج إلى إنشاء أدلة للاحتفاظ بملفات الأصل والوجهة والأخطاء ، ضمن دليل StreamSets الأساسي:
  • / & ltbase directory & gt / tutorial / origin. / & ltbase directory & gt / tutorial / origin
  • / & دليل ltbase & gt / البرنامج التعليمي / الوجهة
  • / & ltbase directory & gt / tutorial / error

انقل ملف citylots-array.json إلى / & ltbase directory & gt / tutorial / origin

إذا لم تكن قد قمت بتسجيل الدخول بالفعل ، فقم بتسجيل الدخول إلى SDC.

من منزل، بيت صفحة أو ابدء الصفحة ، انقر فوق إنشاء خط أنابيب جديد.

في ال خط أنابيب جديد نافذة ، أدخل اسم خط الأنابيب ووصفًا اختياريًا ، وانقر فوق يحفظ.

في لوحة Properties ، انقر فوق ملف سجلات الأخطاء علامة التبويب سجلات الأخطاء الملكية ، حدد اكتب إلى ملف. يقوم هذا بكتابة سجلات الأخطاء إلى ملف حتى تتمكن من التعامل مع سجلات الأخطاء دون الحاجة إلى إيقاف خط الأنابيب.

انقر على سجلات الأخطاء - الكتابة إلى الملف علامة التبويب والمجموعة الدليل إلى / & ltbase directory & gt / tutorial / error

سنستخدم أصل الدليل لمعالجة بيانات نصيب مدينة JSON.

لإضافة المرحلة إلى اللوحة القماشية ، من شريط تعليمات إنشاء خط الأنابيب ، انقر فوق حدد Origin & gt Directory. أو ، في مكتبة المرحلة ، انقر فوق الدليل الأصل. يتم عرض الأصل في اللوحة القماشية وتعرض لوحة Properties خصائص المرحلة.

في لوحة Properties ، انقر فوق ملف الملفات علامة التبويب وتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

  1. انقر على جسون علامة التبويب وتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

يجب أن يبدو خط الأنابيب الخاص بك كما يلي:

من الجيد معاينة البيانات للتحقق من تهيئة Directory Origin بشكل صحيح. فوق قماش خط الأنابيب ، انقر فوق معاينة أيقونة ، واقبل الخصائص الافتراضية. يجب أن تكون قادرًا على التعمق في السجلات القليلة الأولى لـ بيانات الناتج أسفل قماش خط الأنابيب ومشاهدة إحداثيات مضلع قطعة أرض المدينة:

إذا واجهت أي أخطاء ، فتحقق من خصائص خط الأنابيب والأصل.

الآن بعد أن تحققنا من أن Directory Origin يقرأ بيانات JSON بشكل صحيح ، انقر فوق إغلاق المعاينة أيقونة.

تكوين أداة تقييم جافا سكريبت

الآن بعد أن تمت قراءة خط الأنابيب الخاص بنا بنجاح في بيانات JSON ، نحتاج إلى حساب مساحة كل جزء من المدينة. لقد استخدمت نسخة من الخوارزمية لحساب مساحة المضلع على سطح الأرض المقدمة في إجابة على StackExchange نظم المعلومات الجغرافية بواسطة Tim Schaub.

أضف مُقيِّم جافا سكريبت المعالج باللوحة القماشية وقم بتوصيل موقع الإخراج الأول من Directory Origin به.

مع تحديد JavaScript Evaluator ، في لوحة Properties ، انقر فوق ملف جافا سكريبت التبويب.

احذف المحتويات الموجودة في النصي مربع النص ولصقه في البرنامج النصي التالي:

قم بمعاينة خط الأنابيب مرة أخرى ، وانقر فوق مُقيِّم JavaScript ، وسترى أن سجلات الإخراج تحتوي الآن على حقل AREA:

لاحظ أن البرنامج النصي يقوم فقط بنسخ حقل الخصائص من الإدخال إلى سجل الإخراج ومنطقة المجموعات. يؤدي هذا إلى "تسوية" السجل ويجعل من السهل الكتابة إلى جدول Apache Hive.

انقر على إغلاق المعاينة رمز ، وسنضيف وجهة لسجلاتنا المعالجة.

تكوين وجهة Hadoop FS

يمكننا المضي قدمًا وتكوين وجهة Hive Streaming ، ولكن الكتابة إلى Hive أبطأ بكثير من مجرد إلحاق البيانات بملف على القرص ، لذلك سنختبر خط الأنابيب على مجموعة البيانات بأكملها عن طريق كتابتها ببساطة في ملف JSON . سيعطينا هذا بعض الثقة بأن خط الأنابيب صحيح قبل أن نستثمر الوقت في تشغيله ضد Hive.

أضف هادوب FS الوجهة إلى اللوحة القماشية وتوصيل أداة تقييم JavaScript بها.

في لوحة Properties ، انقر فوق ملف هادوب FS التبويب. لاستخدام Hadoop FS للكتابة إلى نظام ملفات محلي ، قم بتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

  1. انقر على ملفات الإخراج علامة التبويب وتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

الآن وقد اكتمل خط الأنابيب الأساسي ، يمكنك البدء فيه بالنقر فوق بداية أيقونة.

تدخل وحدة التحكم في وضع الشاشة وتعرض إحصائيات موجزة في لوحة الشاشة. سوف يستغرق SDC دقيقتين للعمل من خلال السجلات.

عندما يتم استيعاب جميع السجلات البالغ عددها 206.560 سجلًا ، لاحظ أن أداة تقييم JavaScript قد اكتشفت 6 أخطاء:

اضغط على مُقيِّم جافا سكريبت في قماش خط الأنابيب ثم أخطاء علامة التبويب على اليسار. سترى أن الأخطاء الستة كلها SCRIPTING_04 - أرسل البرنامج النصي السجل إلى الخطأ: خطأ في النوع: لا يمكن قراءة الخاصية "النوع" من القيمة الفارغة. توغل في الخطأ الأول وسترى السبب - حقل الشكل الهندسي لهذا السجل خالٍ.

إذا كنت تعمل من خلال السجلات الخمسة المدرجة الأخرى ، فسترى أنها تحتوي جميعها على هندسة فارغة. اتضح أن حفنة من قطع الأرض ليس لها إحداثيات مسجلة. دعنا نصفيها حتى يتمكن مُقيِّم جافا سكريبت من العمل بنجاح على المدخلات الخاصة به.

بيانات المسار مع محدد الدفق

سنقوم بتهيئة محدد البث لتوجيه تلك السجلات التي تحتوي على حقل هندسة غير فارغ فقط إلى أداة تقييم جافا سكريبت.

من شريط تعليمات إنشاء خط الأنابيب ، انقر فوق "نعم" حدد المعالج للاتصال & gt Stream Selector. أو ، في مكتبة المرحلة ، حدد ملف محدد الدفق المعالج وربط أصل الدليل به.

انقر على الظروف التبويب. يتم عرض شرط للدفق الافتراضي. يمثل الدفق الافتراضي أي سجلات لم يتم التقاطها بواسطة شروط أخرى.

انقر على يضيف أيقونة. يتم عرض مربع نص الشرط في لوحة الخصائص ، ويظهر موقع الإخراج المقابل على الجزء الرئيسي في اللوحة القماشية.

يلتقط الشرط التالي السجلات التي يكون فيها حقل الهندسة غير فارغ. يمكنك نسخ التعبير ولصقه ، ولكن حاول كتابته لترى كيف تساعدك ميزة إكمال التعبير في تحديد الوظيفة والتأكد من صحة بناء الجملة.

تمر جميع السجلات التي تطابق هذا الشرط إلى تدفق الإخراج الأول. يتم التقاط جميع السجلات الأخرى بالشرط الافتراضي وتمريرها عبر تدفق الإخراج الثاني.

يجب أن يظهر محدد البث بالشكل التالي:

في السيناريو الخاص بنا ، ليس لدينا أي استخدام للسجلات التي لا تحتوي على أشكال هندسية مرتبطة ، لذلك سنتجاهلها فقط. تتضمن SDC وجهة قمامة تلبي احتياجاتنا بشكل مثالي. ببساطة أضف ملف نفاية الوجهة بلوحة الرسم وتوصيل الإخراج الافتراضي لمحدد البث (المميز بعلامة "2") بها.

إذا حاولت تشغيل خط الأنابيب الآن ، فستلاحظ أنه لا يعالج أي سجلات فعليًا. لماذا هذا؟ حسنًا ، لقد عالج خط الأنابيب بالفعل جميع الملفات الموجودة في دليل الإدخال الخاص به ، لذا فهو ينتظر إدخالًا جديدًا. نظرًا لأننا ما زلنا نطور خط الأنابيب الخاص بنا ، فنحن بحاجة إلى أن نكون قادرين على إعادة تعيين حالته حتى يتمكن من معالجة بيانات الإدخال نفسها مرة أخرى.

أوقف خط الأنابيب إذا كان يعمل ، انقر فوق أكثر أعلى لوحة خط الأنابيب ، ثم انقر إعادة تعيين الأصل. سيُطلب منك تأكيد رغبتك حقًا في إعادة تعيين الأصل ، لذا انقر فوق نعم.

الآن انقر فوق ملف يركض أيقونة. سيعيد خط الأنابيب معالجة بيانات الأصل ، وبعد دقيقتين من المفترض أن ترى أن جميع السجلات البالغ عددها 206.560 قد تمت معالجتها بنجاح ، بدون أخطاء:

انقر على قف رمز لإيقاف خط الأنابيب.

الآن بعد أن رأينا أن خط الأنابيب الخاص بنا يعمل بشكل صحيح ، نحتاج إلى تبديل وجهة Hadoop FS لوجهة تسمح بالاستعلامات. سننشئ جدولًا جديدًا في Hive لتلقي سجلات الإخراج الخاصة بنا. تدعم وجهة SDC Hive Streaming تنسيق ملف ORC (Optimized Row Columnar) ، لذلك سنحتاج إلى تحديد ذلك في كود لغة تعريف البيانات (DDL).

بافتراض أنك تستخدم Cloudera Distribution Hadoop (CDH) QuickStart VM:

افتح علامة تبويب متصفح جديدة ، وانتقل إلى http: //quickstart.cloudera: 8888 / beeswax /

الصق كود DDL التالي في منطقة الاستعلام:

انقر نفذ - اعدم.

يجب أن تنشئ الخلية الجدول في بضع ثوانٍ فقط ، وستبدو الشاشة كما يلي:

قم بتكوين وجهة تدفق الخلية

الخلية جاهزة لسجلات الإخراج الخاصة بنا ، فلنقم بتهيئة وجهة تدفق الخلية:

في لوحة خطوط الأنابيب ، انقر فوق هادوب FS الوجهة ثم انقر فوق حذف أيقونة.

أضف خلية الجري الوجهة إلى اللوحة القماشية وتوصيل أداة تقييم JavaScript بها.

في لوحة Properties ، انقر فوق ملف جنرال لواء التبويب. قم بتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

  1. انقر على خلية نحل التبويب. قم بتكوين الخصائص التالية. استخدم الإعدادات الافتراضية للخصائص غير المدرجة:

قم بتشغيل خط الأنابيب ، وإرسال السجلات إلى الخلية

أوقف خط الأنابيب إذا كان يعمل ، انقر فوق أكثر أعلى لوحة خط الأنابيب ، ثم انقر إعادة تعيين الأصل. سيُطلب منك تأكيد رغبتك حقًا في إعادة تعيين الأصل ، لذا انقر فوق نعم.

الآن انقر فوق ملف يركض أيقونة. مرة أخرى ، سيعيد خط الأنابيب معالجة بيانات الأصل وبعد ساعتين تقريبًا سترى أن جميع السجلات البالغ عددها 206.560 قد تمت معالجتها بنجاح ، بدون أخطاء:

وماذا في ذلك هو أكبر قطعة أرض في مدينة سان فرانسيسكو؟

الآن يمكننا تشغيل استعلام في Hive! دعونا نحصل على أكبر عشر حصص. الصق الاستعلام التالي في منطقة استعلام الخلية وانقر نفذ - اعدم:

بعد دقيقتين من المفترض أن ترى هذه النتيجة:

فيما يلي النتائج بشكل أكثر قابلية للقراءة:

ماببلكلوت بلكلوت block_num lot_num from_st إلى شارع st_type فردي زوجي منطقة
1300001 1300001 1300 1 2901 2901 ليون شارع ا 6104089
1700001 1700001 1700 1 1101 1199 09 الرابع AVE ا 4149480
4591A079 4591A079 4591 أ 79 520 520 رمح AVE ه 2893706
7283004 7283004 7283 4 991 991 بحيرة مرسيد بوليفارد ا 2480004
1939001 1939001 1939 1 300 600 كاليفورنيا AVE ه 1684637
6220002 6220002 6220 2 61 61 جون إف شيلي الدكتور ا 1351541
4502A002 4502A002 4502 أ 2 3305 3305 03RD شارع ا 696521
900003 900003 900 3 3751 3751 لاغونا شارع ا 657407
1939002 1939002 1939 2 0 0 غير معروف باطل ه 620400
7284001 7284001 7284 1 599 599 خط السماء بوليفارد ا 462228

إذن ، عند 6،104،089 متر مربع ، أو 2.36 ميل مربع ، 2901 شارع ليون هي أكبر قطعة أرض في سان فرانسيسكو. ماذا يمكن أن يكون في هذا العنوان؟ لنلقي نظرة:

إنه Presidio! لأغراض مدينة سان فرانسيسكو ، فإن Presidio عبارة عن قطعة أرض عملاقة واحدة.

لقد تعلمت في هذا البرنامج التعليمي:

كيفية إدخال بيانات JSON عبر مصدر الدليل

كيفية تنفيذ عملية حسابية غير بسيطة في مقيِّم JavaScript

كيفية استخدام وجهة Hadoop FS للتطوير السريع لخط الأنابيب الخاص بك

كيفية تجاهل السجلات التي لا تلبي المعايير المطلوبة

كيفية كتابة السجلات في Apache Hive

وأخيرًا ، علمت أن Presidio هي أكبر منطقة في سان فرانسيسكو!


الهندسة المعدة¶

من أجل الحصول على هندسة معدة ، قم بالوصول إلى خاصية GEOSGeometry.prepared. بمجرد حصولك على مثيل PreparedGeometry ، يمكن استخدام طرق الإسناد المكانية ، المدرجة أدناه ، مع كائنات GEOSGeometry الأخرى. يمكن أن تكون العملية ذات الشكل الهندسي المُعد أسرع من حيث الحجم - فكلما كانت الهندسة المعدة أكثر تعقيدًا ، زادت سرعة العملية. لمزيد من المعلومات ، يرجى الرجوع إلى صفحة GEOS wiki حول الأشكال الهندسية المعدة.

أعدت الهندسة ¶

تأخذ جميع الطرق الموجودة في PreparedGeometry حجة أخرى ، والتي يجب أن تكون مثيل GEOSGeometry.

يحتوي على ( آخر ) ¶ يحتوي على_بشكل صحيح ( آخر ) ¶ أغلفة ( آخر ) ¶ الصلبان ( آخر ) ¶ منفصل ( آخر ) ¶ يتقاطع ( آخر ) ¶ تداخلات ( آخر ) ¶ لمسات ( آخر ) ¶ في غضون ( آخر ) ¶


المصانع الهندسية¶

من - الملف(file_h
معامل:file_h (أ بايثون ملف كائن أو مسار سلسلة إلى الملف) - ملف إدخال يحتوي على بيانات مكانية
نوع الإرجاع:أ الجيوسياسيات المقابلة للبيانات المكانية في الملف
  • خيط (سلسلة) - سلسلة تحتوي على بيانات مكانية
  • سريد (عدد صحيح) - معرف المرجع المكاني

أ الجيوسياسيات المقابلة للبيانات المكانية في السلسلة


السائقين¶

فئة أساسية لجميع السائقين.

المعلمات:بحث وتطوير (RequestDataset) - كائن مجموعة بيانات طلب الإدخال.
صف دراسي ocgis.driver.base. الملخص بحث وتطوير ) [مصدر] ¶

الفئة الأساسية للسائقين المجدولين (لا يوجد وصول متغير فردي مثالي).

صف دراسي ocgis.driver.base. AbstractUnstructuredDriver [المصدر] ¶

صف دراسي ocgis.driver.nc. DriverNetcdf ( بحث وتطوير ) [مصدر] ¶

برنامج تشغيل لملفات netCDF يتجنب أي تلميح للبيانات الوصفية.

وسيطات الكلمات الرئيسية لبرنامج التشغيل (driver_kwargs) لمجموعة بيانات الطلب:

يقوم برنامج تشغيل netCDF المدرك لبيانات التعريف بتفسير CF-Grid بشكل افتراضي.

صف دراسي ocgis.driver.nc_scrip. DriverNetcdfSCRIP ( بحث وتطوير ) [مصدر] ¶

برنامج تشغيل لتنسيق الشبكة الهيكلية وغير المهيكلة SCRIP NetCDF. SCRIP هو تنسيق قديم يمثل مقدمة أولية لاتفاقية NetCDF-CF. بشكل افتراضي ، يتم التعامل مع شبكات SCRIP على أنها بيانات غير منظمة مما يؤدي إلى إنشاء شبكة غير منظمة.

صف دراسي ocgis.driver.nc_ugrid. DriverNetcdfUGRID ( بحث وتطوير ) [مصدر] ¶

برنامج تشغيل لبيانات NetCDF يتبع اصطلاح UGRID. سوف يفسر أيضًا اصطلاح CF للمحاور التي لم يتم تحميلها بشكل زائد بواسطة UGRID.

صف دراسي ocgis.driver.vector. سائق فيكتور ( بحث وتطوير ) [مصدر] ¶

سائق لبيانات ناقلات نظم المعلومات الجغرافية.

وسيطات الكلمات الرئيسية لبرنامج التشغيل (driver_kwargs) لمجموعة بيانات الطلب:

سائق لملفات القيمة المفصولة بفواصل.


يتضمن HGeometry أيضًا بنية بيانات / نوع بيانات للرسوم البيانية المستوية. على وجه الخصوص ، يحتوي على بنية بيانات EdgeOracle ، والتي يمكن تضمينها في الوقت (O (n)) الذي يمكنه اختبار ما إذا كان الرسم البياني يحتوي على حافة في وقت ثابت. يتم تحديد معلمات جميع أنواع الهندسة بواسطة النوع العددي r. من المعروف جيدًا أن حساب الفاصلة العائمة والخوارزميات الهندسية لا تسير معًا بشكل جيد ، أي بسبب أخطاء النقطة العائمة ، قد يحصل المرء على نتائج خاطئة تمامًا. ومن ثم ، فإنني أنصح بشدة بعدم استخدام Double أو Float لهذه الأنواع. في العديد من الخوارزميات ، يكفي إذا كان النوع r كسريًا. وبالتالي ، يمكنك استخدام نوع رقم محدد مثل Rational.

PolyTri هو مثلث مضلع للمضلعات البسيطة على أساس خوارزمية Seidel [1]. يتم تحرير PolyTri بموجب Unlicense.


حجج الإدخال

X & # 8212 أول تنسيق ناقلات | مصفوفة

أول تنسيق ، محدد كمتجه أو مصفوفة. يتم دعم مدخلات المصفوفة للمحاور الديكارتية فقط.

يعتمد تفسير الإحداثي الأول على نوع المحاور. بالنسبة للمحاور الديكارتية ، يكون الإحداثي الأول هو x- موقف المحور في وحدات البيانات.

إذا كان كل من x و y متجهين لهما نفس الطول ، فإن الخط يرسم خطًا واحدًا.

إذا كانت x و y مصفوفتان بنفس الحجم ، فإن الخط يرسم عدة أسطر. ترسم الدالة أعمدة y مقابل x.

إذا كان أحدهما x أو y متجهًا والآخر عبارة عن مصفوفة ، فإن الخط يرسم خطوطًا متعددة. يجب أن يساوي طول المتجه أحد أبعاد المصفوفة:

إذا كان طول المتجه يساوي عدد صفوف المصفوفة ، فإن الخط يرسم كل عمود مصفوفة مقابل المتجه.

إذا كان طول المتجه يساوي عدد أعمدة المصفوفة ، فإن الخط يرسم كل صف مصفوفة مقابل المتجه.

إذا كانت المصفوفة مربعة ، فإن الخط يرسم كل عمود مقابل المتجه.

بالنسبة إلى المحاور القطبية ، يكون الإحداثي الأول هو الزاوية القطبية θ بالتقدير الدائري. بالنسبة إلى المحاور الجغرافية ، يكون الإحداثي الأول هو خط العرض بالدرجات. لرسم خطوط في هذه الأنواع من المحاور ، يجب أن تكون x و y بنفس الحجم.

مثال: س = لينسبيس (0،10،25)

أنواع البيانات: واحد | مزدوج | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | قاطع | التاريخ والوقت | المدة الزمنية

Y & # 8212 الإحداثيات الثانية متجه | مصفوفة

الإحداثي الثاني ، محدد كمتجه أو مصفوفة. يتم دعم مدخلات المصفوفة للمحاور الديكارتية فقط.

يعتمد تفسير الإحداثي الثاني على نوع المحاور. بالنسبة للمحاور الديكارتية ، يكون الإحداثي الثاني هو ذ- موقف المحور في وحدات البيانات.

إذا كان كل من x و y متجهين لهما نفس الطول ، فإن الخط يرسم خطًا واحدًا.

إذا كانت x و y مصفوفتان بنفس الحجم ، فإن الخط يرسم عدة أسطر. ترسم الدالة أعمدة y مقابل x.

إذا كان أحدهما x أو y متجهًا والآخر عبارة عن مصفوفة ، فإن الخط يرسم خطوطًا متعددة. يجب أن يساوي طول المتجه أحد أبعاد المصفوفة:

إذا كان طول المتجه يساوي عدد صفوف المصفوفة ، فإن الخط يرسم كل عمود مصفوفة مقابل المتجه.

إذا كان طول المتجه يساوي عدد أعمدة المصفوفة ، فإن الخط يرسم كل صف مصفوفة مقابل المتجه.

إذا كانت المصفوفة مربعة ، فإن الخط يرسم كل عمود مقابل المتجه.

بالنسبة إلى المحاور القطبية ، يكون الإحداثي الثاني هو نصف القطر بوحدات البيانات. بالنسبة إلى المحاور الجغرافية ، يكون الإحداثي الثاني هو خط الطول بالدرجات. لرسم خطوط في هذه الأنواع من المحاور ، يجب أن تكون x و y بنفس الحجم.

مثال: ص = الخطيئة (س)

أنواع البيانات: واحد | مزدوج | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | قاطع | التاريخ والوقت | المدة الزمنية

Z & # 8212 الإحداثيات الثالثة متجه | مصفوفة

الإحداثي الثالث ، محدد كمتجه أو مصفوفة. يتم دعم مدخلات المصفوفة للمحاور الديكارتية فقط.

يعتمد تفسير الإحداثي الثالث على نوع المحاور. بالنسبة للمحاور الديكارتية ، يكون الإحداثي الثالث هو ض- موقف المحور في وحدات البيانات.

إذا كانت x و y و z كلها متجهات لها نفس الطول ، فإن الخط يرسم خطًا واحدًا ثلاثي الأبعاد.

إذا كانت x و y و z كلها مصفوفات بنفس الحجم ، فإن الخط يرسم عدة خطوط ثلاثية الأبعاد باستخدام أعمدة المصفوفة.

إذا كان واحد أو اثنان من x و y و z متجهًا والأخرى عبارة عن مصفوفات من نفس الحجم ، فإن الخط يرسم عدة أسطر ثلاثية الأبعاد. يجب أن يساوي طول المتجه أحد أبعاد المصفوفة.

بالنسبة للمحاور القطبية والجغرافية ، يؤثر الإحداثي الثالث على طبقات الخطوط ثنائية الأبعاد على المحاور. لاستخدام الإحداثي الثالث في هذه الأنواع من المحاور ، يجب أن تكون x و y و z بنفس الحجم.

مثال: ض = الخطيئة (س) + جتا (ص)

أنواع البيانات: واحد | مزدوج | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | قاطع | التاريخ والوقت | المدة الزمنية

الفأس & # 8212 محاور الهدف كائن المحاور | كائن PolarAxes | كائن GeographicAxes

محاور الهدف ، المحددة ككائن محاور ، أو كائن PolarAxes ، أو كائن GeographicAxes. إذا لم تحدد المحاور ، فسيتم رسم وظيفة الخط في المحاور الحالية.

وسيطات زوج الاسم والقيمة

حدد أزواجًا اختيارية مفصولة بفواصل من وسيطات الاسم والقيمة. الاسم هو اسم الوسيطة والقيمة هي القيمة المقابلة. يجب أن يظهر الاسم داخل علامات الاقتباس. يمكنك تحديد عدة وسيطات لزوج الاسم والقيمة بأي ترتيب مثل Name1 و Value1. الاسم N ، القيمة

مثال: الخط (x ، y ، 'Color' ، 'red' ، 'LineWidth' ، 3) ينشئ خطًا أحمر بعرض 3 نقاط.

الخصائص المدرجة هنا ليست سوى مجموعة فرعية. للحصول على قائمة كاملة ، راجع خصائص الخط.

"اللون" & # 8212 لون الخط [0 0.4470 0.7410] (افتراضي) | ثلاثي RGB | كود اللون الست عشري | 'r' | 'g' | 'ب' | .

لون الخط المحدد على هيئة RGB ثلاثي ، أو رمز لون سداسي عشري ، أو اسم لون ، أو اسم قصير.

للون مخصص ، حدد رمز لون RGB ثلاثي أو رمز لون سداسي عشري.

ثلاثي RGB هو ناقل صف ثلاثي العناصر تحدد عناصره شدة مكونات اللون الأحمر والأخضر والأزرق. يجب أن تكون الشدة في النطاق [0،1] على سبيل المثال ، [0.4 0.6 0.7].

رمز اللون السداسي العشري هو متجه حرف أو سلسلة عددية تبدأ برمز التجزئة (#) متبوعًا بثلاثة أو ستة أرقام سداسية عشرية ، والتي يمكن أن تتراوح من 0 إلى F. القيم ليست حساسة لحالة الأحرف. وبالتالي ، فإن رموز الألوان "# FF8800" و "# ff8800" و "# F80" و "# f80" متكافئة.

بدلاً من ذلك ، يمكنك تحديد بعض الألوان الشائعة بالاسم. يسرد هذا الجدول خيارات الألوان المسماة وثلاثية RGB المكافئة وأكواد الألوان السداسية العشرية.


شاهد الفيديو: سااارع قبل إنتهاء العرض ضاعف نقاط في 3 لنقاط التشغيل. طريقة حصول على النقاط بتفصيل. (شهر اكتوبر 2021).