أكثر

قراءة هندسة postgis بأناقة

قراءة هندسة postgis بأناقة


أقوم بسير عمل صغير الحجم في دفتر ipython مع geopandas ورشيقة ، وسحب مجموعة من البيانات الجغرافية المكانية ، أحيانًا من ملفات الأشكال ، وأحيانًا من postgis (حيث يتم تنفيذ معالجة أكثر تكلفة).

الآن ، أقوم بعد ذلك بسحب جداول postgis إلى Python باستخدامsqlalchemy، تحويل الهندسة إلى WKT على طول الطريق ، والحصول على شيء مثل:

sql = "" "حدد ST_AsText (ST_Transform (the_geom ، 4326)) كجسم جديد ، * من public.parcels2010_small limit 5 ؛" "" parcels = pd.read_sql (sql ، engine) parcels + ---- + ---- ----------------------------------------------- + - ------------------------------------------------- + ----------- + ------------- + | معرف | نيوجوم | the_geom | parcel_id | osm_node_id | + -------------------------------------------- ------- + ------------------------------------------ --------- + ----------- + ------------- + | 0 | MULTIPOLYGON ((- 122.991093691444 38.4878691106… | 01060000209C0E00000100000001030000000100000097… | 1805792 | 66237 | + ---- + ---------------------------- ----------------------- + -------------------------- ------------------------- + ----------- + ------------ - + | 1 | MULTIPOLYGON ((- 122.444576448624 37.7346386006… | 01060000209C0E0000010000000103000000010000008A… | 10435 | 123826 | + ---- + ----------------------- ---------------------------- + --------------------- ------------------------------ + ----------- + ------- ------ + | 2 | MULTIPOLYGON ((- 122.796785208193 38.5427593334… | 01060000209C0E0000010000000103000000010000007D… | 1817842 | 313047 | + ---- + ------------------ --------------------------------- + ---------------- ----------------------------------- + ----------- + - ----------- + | 3 | MULTIPOLYGON ((- 122.695538506163 38.3618570798… | 01060000209C0E0000010000000103000000010000009B… | 1934612 | 63776 | + ---- + ------------- -------------------------------------- + ----------- ------------------------------ ---------- + ----------- + ------------- + | 4 | MULTIPOLYGON ((- 122.223424422869 37.8416019090… | 01060000209C0E00000100000001030000000100000072… | 861785 | 26369 | + ---- + ---------------------------- ----------------------- + -------------------------- ------------------------- + ----------- + ------------ - +

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


يفهم GeoAlchemy SQLAlchemy PostGIS و Shapely.

من geoalchemy2.shape import to_shape للطرود في الطرود: parcel_shape = to_shape (parcel.the_geom)

التنسيق الافتراضي لهندسة PostGIS هو WKB المشفر سداسيًا (ثنائي معروف جيدًا). Shapely لديه القدرة على تحويل هذا التنسيق إلىجميلكائن الهندسة معwkbوحدة:

من استيراد جميل wkb #… sql = "" حدد * من public.parcels2010_small LIMIT 5 ؛ "" "parcels = pd.read_sql (sql، engine) للطرود في الطرود: parcel.the_geom = wkb.loads (parcel.the_geom، عرافة = صحيح)

إذا كنت ستطبع الهندسة بعد ذلك ، فيجب أن تبدو كما يلي:

طرود الطباعة [0] .the_geom 

انظر المستندات على وحدة shapely.wkb هنا.


لماذا يمكن بشكل جميل / geos تحليل هذا & # 39invalid & # 39 ثنائيًا معروفًا جيدًا؟

أحاول تحليل ثنائي معروف جيدًا وهو ترميز ثنائي للكائنات الهندسية المستخدمة في أنظمة المعلومات الجغرافية (GIS). أنا أستخدم هذه المواصفات من ESRI (نفس النتائج هنا من esri). لدي بيانات إدخال من Osmosis وهي أداة لتحليل بيانات OpenStreetMap ، وتحديداً تنسيق pgsimp-dump الذي يعطي التكرار السداسي للثنائي.

تقول مستندات ESRI أنه يجب أن يكون هناك 21 بايت فقط للنقطة ، و 1 بايت لترتيب البايت ، و 4 لـ uint32 للنوع ، و 8 لـ x المزدوج و 8 لـ y المزدوج.

مثال من التناضح هو هذا المثال (سداسي عشري): 0101000020E6100000DB81DF2B5F7822C0DFBB7262B4744A40 ، والذي يبلغ طوله 25 بايت.

جميل برنامج بيثون لتحليل WKB (إلخ) ، والذي يعتمد على مكتبة C الشهيرة GEOS يكون قادر على تحليل هذه السلسلة:

عندما أطلب من Shapely التحليل من ثم التحويل إلى WKB أحصل على 21 بايت.

الفرق هو 4 بايت في الوسط ، والتي تظهر 3 بايت في uint32 من أجل typeif = d

لماذا يمكن بشكل جميل / geos تحليل WKB هذا عندما يكون WKB غير صالح؟ ماذا تعني هذه البايتات؟


GeoJSON

يمثل ميزات بسيطة بتنسيق JSON.

يمكن أن يمثل كائن GeoJSON أيًا مما يلي:

  • هندسة (Point أو LineString أو Polygon أو MultiPoint أو MultiLineString أو MultiPolygon أو GeometryCollection)
  • ميزة (كائن بهندسة وخصائص)
  • مجموعة من الميزات

GDAL (مكتبة تجريد البيانات الجغرافية المكانية) هي سكين الجيش السويسري مفتوح المصدر لتنسيقات خطوط المسح. يتضمن أيضًا مكتبة ميزات OGR البسيطة لتنسيقات المتجهات.

تكشف روابط GDAL's python معظم وظائف GDAL.

روابط GDAL python ليست "Pythonic" جدًا

معظم روابط GDAL عبارة عن أغلفة رقيقة من نظائرها في C ++.


طرح QGIS / PostGIS الجزء الأول: المستند

كرهت وضع الجزء الأول هناك. أبدأ الكثير من منشورات الجزء الأول ولم أصل مطلقًا إلى الجزء 2 & # 8230..أنا أخطط لكون هذا المنشور متعدد الأجزاء. بعد فترة من الصراخ & # 8216 ، لماذا & # 8217t نضع QGIS في كل مكان & # 8217 كان لدي عميل قرر استبدال ArcGIS كنظم المعلومات الجغرافية الأساسي الخاص به. كنا نعمل جنبًا إلى جنب مع QGIS / PostGIS / Fulcrum / ArcGIS ووصلنا أخيرًا إلى نقطة للتبديل فقط. لقد أجريت الكثير من عمليات تثبيت QGIS والكثير من تثبيتات ArcGIS وتثبيت ما يكفي من PostGIS / PostgreSQL لا يقلقني & # 8217 & # 8211 ما الذي يقلقني؟ بيانات.

في عام 1995 ، كنت أعمل لدى الحكومة الفيدرالية في رسم الخرائط التجارية وكان الشيء الوحيد الذي اعتبرته في النهاية أمرًا مفروغًا منه هو & # 8220 قاموس البيانات & # 8221. كنا نعمل في مشروع وفي النهاية يجلس أحد الرجال ويفتح برنامج جدول بيانات ويوثق كل طبقة أنشأناها ولماذا صنعناها. أعتقد أنه في وقت ما من عام 1996 أو قريبًا من ذلك كان لدينا بيانات وصفية لـ FGDC ولكي أكون صادقًا لا أتذكر ما إذا كنا قد واصلنا استخدام قاموس البيانات أو انتقلنا إلى معيار FGDC.

كان لدى العميل قاعدة بيانات جغرافية تستند إلى ملف كانوا يعملون بها لفترة طويلة. كانت وظيفية. كان يحتوي على مجالات وأنواع فرعية وكل الأشياء التي تأمل أن تحتوي عليها قاعدة بيانات ESRI مبنية بشكل صحيح. الشيء الوحيد الذي لم يكن & # 8217t كان & # 8220reasons & # 8221. كما في & # 8220 ، لماذا هذا الحقل هنا وليس هنا ولماذا هذا هنا؟ & # 8221 كان هناك الكثير من المجالات. ليس هناك الكثير من الأنواع الفرعية بالرغم من ذلك. من الواضح أنه كان هناك إلى حد ما باب دوار منتظم للاستشاريين. أضاف الجميع دورهم في الأشياء وهنا جلست & # 8230. وهكذا بدأت قائمة كاملة من الأسئلة تنتهي بكتابة كل شيء في محرر مستندات Google. نعم & # 8211 22 بعد سنوات ، قمت ببناء قاموس بيانات لوصف جميع السمات والأعمدة.

المجالات في ArcGIS

إذا نظرت إلى الوراء في وقتي لتحويل البيانات وضربت رأسي على الحائط & # 8211 60٪ كان يسأل & # 8220 لماذا؟ & # 8221. ثم توثيق الردود. في بعض الحالات ، كان علينا فقط قبول & # 8220that & # 8217s تمامًا كما هو & # 8221 وفي حالات أخرى تمكنت من إزالة بعض الانتفاخ من قاعدة البيانات. ما زلت أعتقد أن هناك حاجة إلى جولة ثانية من التشذيب في قاعدة البيانات هذه.

لذا سأقضي بعض الوقت في الحديث عن هذه الخطوة. ثم تحدث عن QGIS 3.2 لأن ذلك جاء & # 8211 وهناك أشياء في هذا الإصدار تجعلني أرغب في ترقيتها من LTR الآن. بالنسبة لأولئك الذين ليسوا على دراية بـ QGIS مرة واحدة في السنة ، تحصل على تصريح طويل الأجل. إنه & # 8217s رائع لأن & # 8220 أشياء لا تتغير & # 8221 & # 8211 هو & # 8217s مستقرة. لذلك لدينا عدد كافٍ من الأماكن سيبقى حتى أكتوبر / تشرين الأول على الأقل.

ينتهي الجزء 1 من كل ذلك & # 8217 s rambling & # 8230 أو يبدأ هنا: توثيق البيانات. اجلس مع شخص GIS واسأل عن السبب الذي يجعلك & # 8217 ستثير أعصابه. يجب أن تكون إجابتك الافتراضية لكل شيء هي & # 8220delete & # 8221. إلا أنك لا تفعل & # 8217t. استخدم ArcGIS لأنه ستكون هناك بعض الأشياء التي لن تجدها في التحدث إلى أي شخص. بمجرد كتابة كل شيء يمكنك التفكير فيه & # 8217 ، يمكنك البدء. خذ أفضل طبقة لديك وانقلها إلى PostGIS. افحصها. تحقق مرة أخرى. تحقق ذلك مرة أخرى. تحقق من أطوال المجال. تحقق من حقول التاريخ. تحقق للتأكد من أن شخصًا ما لديه & # 8217t & # 8220shapefiled & # 8221 بياناتك وأنك & # 8217 متبقية مع الأوصاف & # 8220descriptio & # 8221 vs.

مثال & # 8211 قاعدة البيانات هذه تحتوي على حقلين حيرني تمامًا: الموقع والمكان. كان الموقع لـ & # 8220 حيث & # 8221 كانت البيانات موجودة في عنوان. كان المكان عنصرًا نائبًا للملاحظات. لم يكن لدي أي دليل. لحسن الحظ ، كان العميل صبورًا حيث طرحت المزيد والمزيد من الأسئلة. لاحظ لقطة الشاشة.

السبب الآخر الذي جعلني أكتب كل هذا هنا & # 8211 أعتقد أن هذه على وشك أن تكون خدمة: الانتقال إلى خادم مجاني ومفتوح المصدر مدعوم تجاريًا للعملاء الذين لا يمكنهم تحمل جميع التراخيص التي تأتي مع خيار ESRI. بالطبع لا أريد تسميته & # 8216 Open geo suite & # 8217 منذ أن تم استخدام هذا الاسم. لا أخطط لإجراء التنزيلات. كانت حرقة الفؤاد الكبيرة التي أعانيها هي أنني لم أحمل & # 8217t خادمًا جغرافيًا بالنسبة لهم & # 8211 لم أتمكن & # 8217t من تبرير النفقات العامة وضرب رأسي على Windows Server أكثر بالإضافة إلى أنه كان لديهم خادم عظام. كانت القدرة على تحرير البيانات أكثر أهمية من إخراج الخدمات. ربما لاحقًا & # 8211 ولكن في الوقت الحالي & # 8211 يقومون بتحرير الخرائط وصنعها واتخاذ القرارات بناءً على مكان وجودنا.


الأساسيات¶

كما هو موضح في الفصل 2 ، هناك عدد قليل من هياكل البيانات الرئيسية المستخدمة في علم البيانات الجغرافية: الجداول الجغرافية (التي تتوافق بشكل عام مع نماذج بيانات الكائن) ، أو النقاط النقطية أو الأسطح (التي تتوافق بشكل عام مع نموذج بيانات الحقل) ، والشبكات المكانية (التي تتوافق بشكل عام مع نموذج بيانات الرسم البياني). نناقش هذه بدورها في جميع أنحاء هذا القسم.

الجداول الجغرافية¶

عادة ما تتطابق الكائنات الجغرافية مع ما نطلق عليه اسم الجدول الجغرافي. يمكن اعتبار الجداول الجغرافية على أنها علامة تبويب في جدول بيانات حيث يسجل أحد الأعمدة معلومات هندسية. تمثل بنية البيانات هذه كائنًا جغرافيًا واحدًا كصف من جدول يسجل كل عمود في الجدول معلومات حول الكائن أو سماته أو ميزاته ، كما سنرى أدناه. عادة ، يوجد عمود خاص في هذا الجدول يسجل ملف الهندسة من الكائن. تهدف أنظمة الكمبيوتر التي تستخدم بنية البيانات هذه إلى إضافة جغرافيا إلى ملف قاعدة بيانات علائقية، مثل PostgreSQL (من خلال ملحق PostGIS الخاص بها) أو sqlite (من خلال امتدادها المكاني). علاوة على ذلك ، فإن العديد من لغات علوم البيانات (مثل R و Julia و Python) لديها حزم تعتمد بنية البيانات هذه أيضًا (مثل sf و ArchGDAL و geopandas) ، وسرعان ما أصبحت بنية البيانات الرئيسية لـ البيانات الجغرافية القائمة على الكائن.

قبل المتابعة ، من المفيد ذكر توضيح سريع للمصطلحات. خلال هذا الكتاب ، بغض النظر عن بنية البيانات المستخدمة ، سوف نشير إلى قياس حول الملاحظة كـ a خاصية. هذا يتوافق مع الأعمال الأخرى في علم البيانات والتعلم الآلي. ثم ، مجموعة واحدة من القياسات هي أ عينة. بالنسبة للجداول ، يعني هذا أن المعلم عبارة عن عمود والعينة عبارة عن صف. من الناحية التاريخية ، على الرغم من ذلك ، استخدم علماء المعلومات الجغرافية كلمة "ميزة" للإشارة إلى ملاحظة فردية ، نظرًا لأن "الميزة" في رسم الخرائط هي كيان على الخريطة ، و "سمة" لوصف خصائص تلك الملاحظة. في مكان آخر ، أ خاصية قد يسمى أ عامل، وأ عينة يشار إليه على أنه سجل. لذا ، فإن المصطلحات المتسقة مهمة: بالنسبة لهذا الكتاب ، أ خاصية هي سمة مُقاسة تتعلق بملاحظة (عمود) ، و عينة هي مجموعة واحدة من القياسات (صف).

لفهم بنية الجداول الجغرافية ، من المفيد قراءة مجموعة البيانات countries_clean.gpkg المدرجة في هذا الكتاب والتي تصف البلدان في العالم. لقراءة هذه البيانات ، يمكننا استخدام طريقة read_file () في الجيوباندا: ^ [سنستخدم عمومًا قوسين منحنيين (مثل اسم الأسلوب ()) للإشارة إلى وظيفة، وسيتم حذفها (مثل الحزمة) عند الإشارة إلى كائن أو حزمة.]

ويمكننا فحص الجزء العلوي من الجدول باستخدام طريقة .head ():

مشرف الهندسة
0 إندونيسيا متعدد المضلعات (((13102705.696 463877.598 ، 13102.
1 ماليزيا متعدد المضلعات (((13102705.696 463877.598 ، 13101.
2 تشيلي مولتيبوليجون ((-7737827.685 -1979875.500 ، -77.
3 بوليفيا بوليجون ((-7737827.685 -1979875.500 ، -7737828.
4 بيرو مولتيبوليجون ((-7737827.685 -1979875.500 ، -77.

كل صف من هذا الجدول هو دولة واحدة. لكل بلد ميزتان فقط: الاسم الإداري للبلد وهندسة حدود البلد. يتم ترميز اسم البلد في عمود ADMIN باستخدام نوع Python str ، والذي يستخدم لتخزين البيانات المستندة إلى النص. يتم تخزين هندسة حدود الدولة في عمود الهندسة ، ويتم ترميزها باستخدام فئة خاصة في Python تُستخدم لتمثيل الكائنات الهندسية. كما هو الحال مع هياكل البيانات المستندة إلى الجدول الأخرى في Python ، يحتوي كل صف وعمود على فهرس يحددها بشكل فريد ويتم عرضه بالخط العريض على الجانب الأيسر من الجدول. هذا الجدول الجغرافي هو مثال على كائن geopandas.GeoDataFrame ، المستخدم في جميع أنحاء نظام Python البيئي لتمثيل البيانات الجغرافية.

تخزن الجداول الجغرافية المعلومات الجغرافية كعمود إضافي. لكن كيف يتم تشفير هذه المعلومات؟ لنرى ، يمكننا التحقق من نوع الكائن في الصف الأول:

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

يجب أن يتم تغيير الأشكال الهندسية بعناية: نظرًا لأن عمود الهندسة خاص ، فهناك وظائف خاصة لضبط الشكل الهندسي. على سبيل المثال ، إذا أردنا تمثيل كل دولة باستخدام النقطه الوسطى، نقطة في منتصف الشكل ، إذًا يجب أن نحرص على التأكد من تعيين عمود هندسي جديد بشكل صحيح باستخدام طريقة set_geometry (). يمكن أن يكون هذا مفيدًا عندما تريد العمل باستخدام تمثيلين هندسيين مختلفين لنفس العينة الأساسية.

دعونا نرسم خريطة لكل من الحدود والنقطة الوسطى للبلد. أولاً ، لحساب النقطه الوسطى ، يمكننا استخدام الخاصية gt_polygons.geometry.centroid. هذا يعطينا النقطة التي تقلل متوسط ​​المسافة من جميع النقاط الأخرى على حدود الشكل. إعادة تخزين ذلك إلى عمود يسمى النقطه الوسطى:

لدينا الآن ميزة إضافية:

مشرف الهندسة النقطه الوسطى
0 إندونيسيا متعدد المضلعات (((13102705.696 463877.598 ، 13102. POINT (13055431.810 -248921.141)
1 ماليزيا متعدد المضلعات (((13102705.696 463877.598 ، 13101. POINT (12211696.493 422897.505)
2 تشيلي MULTIPOLYGON ((-7737827.685 -1979875.500 ، -77. POINT (-7959811.948 -4915458.802)
3 بوليفيا بوليجون ((-7737827.685 -1979875.500 ، -7737828. POINT (-7200010.945 -1894653.148)
4 بيرو مولتيبوليجون ((-7737827.685 -1979875.500 ، -77. POINT (-8277554.831 -1032942.536)

على الرغم من حقيقة أن النقطه الوسطى هي هندسة ، إلا أنها لم يتم تعيينها حاليًا على أنها هندسة لطاولتنا. يمكننا التبديل إلى عمود النقطه الوسطى باستخدام طريقة set_geometry (). أخيرًا ، يمكننا رسم النقطه الوسطى وحدود كل بلد عن طريق تبديل عمود الهندسة باستخدام set_geometry:

لاحظ كيف يمكننا إنشاء خريطة عن طريق استدعاء .plot () على GeoDataFrame. يمكننا تلوين كل ميزة حسب الموضوع بناءً على عمود عن طريق تمرير اسم هذا العمود إلى طريقة الرسم (كما نفعل مع ADMIN في هذه الحالة).

وبالتالي ، كما يجب أن يكون واضحًا الآن ، يمكن تمثيل أي نوع من الكائنات الجغرافية تقريبًا في عمود (أعمدة) هندسي واحد (أو أكثر). التفكير في عدد الأنواع المختلفة من الأشكال أو الأشكال الهندسية يمكن للمرء أن يرسمه بسرعة يحير العقل. لحسن الحظ ، حدد الاتحاد الجغرافي المكاني المفتوح (OGC) مجموعة من الأنواع "المجردة" التي يمكن استخدامها لتحديد أي نوع من الهندسة. تحدد هذه المواصفات ، التي تم ترميزها في ISO 19125-1 - مواصفات "الميزات البسيطة" - العلاقات الرسمية بين هذه الأنواع: النقطة هي موقع ذو أبعاد صفرية مع إحداثي x و y ، حيث أن LineString عبارة عن مسار يتكون من مجموعة من المزيد من نقطة واحدة ، والمضلع هو سطح به سلسلة خط واحدة على الأقل تبدأ وتتوقف بنفس الإحداثيات. كل هذه الأنواع أيضا تحتوي على متغيرات متعددة تشير إلى مجموعة من الأشكال الهندسية المتعددة من نفس النوع. لذلك ، على سبيل المثال ، يتم تمثيل بوليفيا كمضلع واحد:

مشرف الهندسة النقطه الوسطى
3 بوليفيا بوليجون ((-7737827.685 -1979875.500 ، -7737828. POINT (-7200010.945 -1894653.148)

بينما إندونيسيا عبارة عن مضلع متعدد يحتوي على العديد من المضلعات لكل جزيرة على حدة في الدولة:

مشرف الهندسة النقطه الوسطى
0 إندونيسيا متعدد المضلعات (((13102705.696 463877.598 ، 13102. POINT (13055431.810 -248921.141)

في كثير من الحالات ، سيكون للجداول الجغرافية أشكال هندسية لنوع واحد من السجلات الكل كن Point أو LineString ، على سبيل المثال. ومع ذلك ، لا يوجد شرط رسمي بأن أ الجدول الجغرافي له أشكال هندسية لها نفس النوع.

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

نظرًا لأننا قرأناها مع الباندا ، فقد تم تحميل الجدول كإطار بيانات ، بدون بعد مكاني واضح:

إذا فحصنا الجدول ، وجدنا أنه لا يوجد عمود هندسي:

معرف المستخدم خط الطول خط العرض الموعد محجوز الصورة / video_page_url x ذ
0 10727420 @ N00 139.700499 35.674000 2010-04-09 17:26:25.0 http://www.flickr.com/photos/[email protected]/4545. 1.555139e + 07 4.255856e + 06
1 8819274 @ N04 139.766521 35.709095 2007-02-10 16:08:40.0 http://www.flickr.com/photos/[email protected]/26503. 1.555874e + 07 4.260667e + 06
2 62068690 @ N00 139.765632 35.694482 2008-12-21 15:45:31.0 http://www.flickr.com/photos/[email protected]/3125. 1.555864e + 07 4.258664e + 06
3 49503094041 @ N01 139.784391 35.548589 2011-11-11 05:48:54.0 http://www.flickr.com/photos/49503094041[email protected]/6. 1.556073e + 07 4.238684e + 06
4 40443199 @ N00 139.768753 35.671521 2006-04-06 16:42:49.0 http://www.flickr.com/photos/[email protected]/2482. 1.555899e + 07 4.255517e + 06

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

تحويل الإحداثيات إلى أشكال هندسية:

قم بإنشاء كائن GeoDataFrame:

والآن يبدو شكل ومظهر gt_points تمامًا مثل البلدان التي رأيناها من قبل ، مع الاختلاف الذي يخزن فيه عمود الهندسة أشكال POINT الهندسية:

معرف المستخدم خط الطول خط العرض الموعد محجوز الصورة / video_page_url x ذ الهندسة
0 10727420 @ N00 139.700499 35.674000 2010-04-09 17:26:25.0 http://www.flickr.com/photos/[email protected]/4545. 1.555139e + 07 4.255856e + 06 POINT (139.70050 35.67400)
1 8819274 @ N04 139.766521 35.709095 2007-02-10 16:08:40.0 http://www.flickr.com/photos/[email protected]/26503. 1.555874e + 07 4.260667e + 06 POINT (139.76652 35.70909)
2 62068690 @ N00 139.765632 35.694482 2008-12-21 15:45:31.0 http://www.flickr.com/photos/[email protected]/3125. 1.555864e + 07 4.258664e + 06 POINT (139.76563 35.69448)
3 49503094041 @ N01 139.784391 35.548589 2011-11-11 05:48:54.0 http://www.flickr.com/photos/[email protected]/6. 1.556073e + 07 4.238684e + 06 POINT (139.78439 35.54859)
4 40443199 @ N00 139.768753 35.671521 2006-04-06 16:42:49.0 http://www.flickr.com/photos/[email protected]/2482. 1.555899e + 07 4.255517e + 06 POINT (139.76875 35.67152)

الأسطح¶

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

لاستكشاف كيفية تمثيل Python للأسطح ، سنستخدم مقتطفًا لمدينة ساو باولو البرازيلية لمجموعة بيانات سكانية عالمية. تسجل مجموعة البيانات هذه أعداد السكان في الخلايا ذات الأبعاد نفسها التي تغطي سطح الأرض بشكل موحد. يتوفر المقتطف الخاص بنا كملف GeoTIF ، وهو نوع مختلف من تنسيق صورة TIF يتضمن معلومات جغرافية. يمكننا استخدام طريقة open_rasterio () من حزمة xarray للقراءة في GeoTIF:

يؤدي هذا إلى قراءة البيانات في كائن DataArray:

xarray هي حزمة للعمل مع المصفوفات ذات العلامات متعددة الأبعاد. لنفك هذا: يمكننا استخدام مصفوفات ليس فقط بعدين كما هو الحال في جدول يحتوي على صفوف وأعمدة ، ولكن مع عدد عشوائي منها ، يتم "تتبع" كل من هذه الأبعاد بواسطة فهرس يجعل من السهل والفعال معالجتها. في xarray ، تسمى هذه الفهارس إحداثيات ، ويمكن استرجاعها من DataArray الخاص بنا من خلال سمة coords:

ومن المثير للاهتمام ، أن سطحنا لديه ثلاثة الأبعاد: x و y و band. الأول هو تتبع خطوط الطول والعرض التي تغطيها كل خلية في شبكتنا السكانية. للثالث قيمة واحدة (1) ، وفي هذا السياق ، فهي ليست مفيدة جدًا. لكن من السهل تخيل سياقات يكون فيها البعد الثالث مفيدًا. على سبيل المثال ، قد تحتوي الصورة الملونة الضوئية على ثلاثة نطاقات: الأحمر والأزرق والأخضر. قد تلتقط المستشعرات الأكثر قوة نطاقات إضافية ، مثل الأشعة تحت الحمراء القريبة (NIR) أو حتى نطاقات الراديو. أو ، السطح الذي يتم قياسه بمرور الوقت ، مثل المكعبات الأرضية التي ناقشناها في الفصل 2 ، سيكون له نطاقات لكل نقطة زمنية يتم فيها قياس الحقل. وبالتالي ، سيكون للسطح الجغرافي بعدين يسجلان موقع الخلايا (x و y) ، ونطاق واحد على الأقل يسجل الأبعاد الأخرى المتعلقة ببياناتنا.

يحتوي كائن xarray.DataArray على معلومات إضافية حول القيم المخزنة ضمن سمة Attrs:

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

وبالتالي ، فإن DataArray الخاص بنا له ثلاثة أبعاد:

ستكون العملية الشائعة هي تقليل هذا إلى المنطقتين الجغرافيتين فقط. يمكننا القيام بذلك باستخدام عامل التشغيل sel ، والذي يسمح لنا بتحديد البيانات حسب قيمة إحداثياتها:

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

هذا يعطينا لمحة عامة عن توزيع السكان في منطقة ساو باولو. ومع ذلك ، إذا فحصنا أكثر ، يمكننا أن نرى أن الخريطة تتضمن أعدادًا سالبة! كيف يكون ذلك؟ كما اتضح ، يتم تخزين البيانات المفقودة تقليديًا في الأسطح ليس كفئة خاصة بها (مثل NaN) ولكن بقيمة مستحيلة. إذا عدنا إلى نسخة attrs أعلاه ، يمكننا أن نرى كيف تحدد السمة nodatavals البيانات المفقودة المسجلة بـ -200. مع أخذ ذلك في الاعتبار ، يمكننا استخدام طريقة where () لتحديد القيم الموجودة فقط ليس -200:

jupyter nbconvert - toebook –execute captions.ipynb cp ../book/infrastructure/logo/favicon.ico tmp_book / favicon.ico jupyter-book build tmp_book –builder latex sed -e 's / section / Chapter / g' -e 's / subection / section / g' -e 's / sububection / subection / g' tmp_book / _build / latex / python.tex & gt tmp_book / _build / latex / python_1.tex jupyter nbconvert –to دفتر ملاحظات –تنفيذ البنية التحتية لاتكس. cp tmp_book / _build / latex / part1.tex tmp_book / _build / latex / part1.md pandoc tmp_book / _build / latex / part1.md -o tmp_book / _build / latex / part1.tex cp tmp_book / _build / latex / part2.tex tmp_book / _build / latex / part2.md pandoc tmp_book / _build / latex / part2.md -o tmp_book / _build / latex / part2.tex cp tmp_book / _build / latex / part3.tex tmp_book / _build / latex / part3.md pandoc tmp_book / _build / latex / part3.md -o tmp_book / _build / latex / part3.tex يبدو شريط الألوان الآن أكثر منطقية ويشير حقيقة التهم ، بدلاً من تضمين قيم العناصر النائبة للبيانات المفقودة.

الرسوم البيانية المكانية¶

تخزن الرسوم البيانية المكانية الاتصالات بين الكائنات عبر الفضاء. قد تكون هذه الروابط مستمدة من الطوبولوجيا الجغرافية (مثل التواصل) أو المسافة أو أبعاد أكثر تعقيدًا مثل تدفقات التفاعل (مثل التنقل ، والتجارة ، والاتصال). مقارنة بالجداول والأسطح الجغرافية ، تختلف الرسوم البيانية المكانية إلى حد ما. أولاً ، في معظم الحالات لا يسجلون قياسات حول ظاهرة معينة ، بل يركزون عليها بدلاً من ذلك روابط، على تخزين العلاقات بين الأشياء حيث يتم تسهيلها (أو إعاقتها في غيابها) بواسطة الفضاء. ثانيًا ، بسبب هذه الطبيعة العلائقية ، يتم تنظيم البيانات بطريقة غير منظمة: في حين أن عينة واحدة قد تكون متصلة بعينة أخرى فقط ، يمكن لعينة أخرى عرض عدة روابط. هذا في تناقض صارخ مع الجداول والأسطح الجغرافية ، وكلاهما له بنية محددة بوضوح وشكل وأبعاد يتم تنظيم البيانات فيها. تُترجم هذه الخصائص إلى مجموعة مختلفة من هياكل بيانات بايثون. على عكس الهياكل السابقة التي رأيناها ، هناك هياكل بيانات مختلفة لتمثيل الرسوم البيانية المكانية ، كل منها محسّن لسياقات مختلفة. إحدى هذه الحالات هي تكامل الاتصالات المكانية في الأساليب الإحصائية مثل تحليل البيانات الاستكشافية أو الانحدار. لهذا ، فإن بنية البيانات الأكثر شيوعًا هي مصفوفات الأوزان المكانية ، والتي نخصص لها الفصل التالي.

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

للتوضيح ، سوف نعتمد على مكتبة osmnx ، والتي يمكنها الاستعلام عن البيانات من OpenStreetMap. على سبيل المثال ، نقوم باستخراج الرسم البياني القائم على الشارع لمنتزه يويوجي بالقرب من بياناتنا السابقة من طوكيو:

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

بمجرد إرجاع البيانات إلى osmnx ، تتم معالجتها في تمثيل Python للرسم البياني:

يمكننا إجراء فحص سريع لهيكل الرسم البياني باستخدام طريقة الرسم البياني:

كائن الرسم البياني الناتج هو في الواقع MultiDiGraph من networkx ، وهي مكتبة رسوم بيانية مكتوبة بلغة Python. يتم تخزين الرسم البياني هنا كمجموعة من 106 عقدة (تقاطعات الشوارع):

و 287 حافة (شوارع) تربطهم:

يمكن الاستعلام عن كل عنصر من هذه العناصر للحصول على مزيد من المعلومات مثل موقع ومعرف العقدة:

خصائص الحافة:

أو كيف ترتبط المكونات المختلفة للرسم البياني ببعضها البعض. على سبيل المثال ، ما هي العقد الأخرى المتصلة مباشرة بالعقدة 1520546819؟

وبالتالي ، من السهل تمثيل الشبكات في Python ، وهي واحدة من هياكل البيانات الرئيسية الثلاثة في علم البيانات الجغرافية.


مدهنتد

في فيلم Harry Potter and the Order or the Phoenix ، لماذا لم ينجح السيد Filch في فتح غرفة المتطلبات إذا كان هذا هو ما يحتاج إليه؟

هل يمكن للمرء أن يصبح باحثًا ناجحًا من خلال كتابة بعض الأوراق البحثية الجيدة حقًا أثناء وجوده خارج الأوساط الأكاديمية؟

هل توقفت آلة Foo هذه؟

منع الأشخاص من التقاط صور لي باستخدام الهاتف الذكي

كيف يمكنني معرفة ما إذا كان خط سير الرحلة مزيفًا؟

هل يمكن للشخص الذي يلقي طريقة Shapechange ويتحول إلى مدقق إملائي استخدام التهجئة الفطرية لإلقاء التعاويذ مع وقت طويل للإلقاء؟

كيفية وضع علامة على علب المشروبات في المبرد لشخص كفيف؟

المجلات غير التابعة لـ OR والتي تنشر أبحاث OR بشكل منتظم

لماذا لا يستطيع الجنود رؤية أسلحتهم دون أوامر الضباط؟

كيفية كتابة التكاملات "الرأسية" مع تغيير الحجم التلقائي

مثلث سلحفاة سيربينسكي

هل التحديث عدة مرات هو حالة اختبار لتطبيقات الويب؟

ما هي الطريقة التي يجب استخدامها في قمة المجموعة للحصول على رمز المصادقة من خادم بعيد؟

يؤدي إلغاء الإشارة إلى مؤشر في مُهيئ حلقة for إلى حدوث خطأ في مقطع

هل تضمن الولايات المتحدة أي حريات فريدة؟

القوائم المنسدلة & # 38 Chevrons للغات اليمين إلى اليسار

قضية الانسحاب Tikzcd

أثناء كارثة مكوك الفضاء كولومبيا عام 2003 ، لماذا قال مدير الرحلة ، "أغلق الأبواب"؟

عدم الجدوى في نماذج التحسين الرياضي

هل يمكن لشاعر College of Swords استخدام Blade Flourishing عدة مرات في كل مرة؟

لماذا تسمح شريحة إنتل Haswell بأن يكون الضرب أسرع بمرتين من الجمع؟

نشر المقاول السابق كود مصدر الشركة وأسرارها على الإنترنت

هل يمكنك استخدام Shapechange مع مآثر الشخصية لمواجهة Tarrasque؟

Shp2pgsql-gui.exe - خطأ في النظام

كيفية تثبيت PostGIS shp2pgsql-gui على CentOS 6؟ أخطاء QGIS SPIT يتم تحميل ملف الشكل إلى PostGISError في استيراد ملف الأشكال إلى postgreSQL باستخدام shp2psql؟ خط tablePostGIS الخطي إلى خطأ في ملف الشكل مع شكل جميل / fiona لماذا لا يمكنني الاتصال بقاعدة بيانات PostGIS الخاصة بي؟ تغيير نوع البيانات بعد التصدير من PostgreSQL إلى حل المشكلات مع PostGis Shapefile Import / Export Manager دون تفسير كيفية حل & # 8220libintl-9.dll مفقود & # 8221 عند محاولة تشغيل PostGIS 2.0 Shapefile و DBF Loader Exporter

لقد تلقيت هذه الرسالة عندما كنت أحاول تشغيل PostGIS 2.0 shapefile و dbf محمل ومصدر لأول مرة. حاولت إعادة التثبيت لكنها لم تعمل بعد التثبيت الثاني أيضًا. لدي Win10 و PgAdmin4. كيف يمكنني حل هذه المشكلة؟

ما هو إصدار PG الذي تستخدمه؟ في حالة الإصدار 11.0 من PG ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis

تحقق من التشفير و SRID

لقد تلقيت هذه الرسالة عندما كنت أحاول تشغيل PostGIS 2.0 shapefile و dbf محمل ومصدر لأول مرة. حاولت إعادة التثبيت لكنها لم تعمل بعد التثبيت الثاني أيضًا. لدي Win10 و PgAdmin4. كيف يمكنني حل هذه المشكلة؟

ما هو إصدار PG الذي تستخدمه؟ في حالة الإصدار 11.0 من PG ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis

تحقق من التشفير و SRID

لقد تلقيت هذه الرسالة عندما كنت أحاول تشغيل PostGIS 2.0 shapefile و dbf محمل ومصدر لأول مرة. حاولت إعادة التثبيت لكنها لم تعمل بعد التثبيت الثاني أيضًا. لدي Win10 و PgAdmin4. كيف يمكنني حل هذه المشكلة؟

لقد تلقيت هذه الرسالة عندما كنت أحاول تشغيل PostGIS 2.0 shapefile و dbf محمل ومصدر لأول مرة. حاولت إعادة التثبيت لكنها لم تعمل بعد التثبيت الثاني أيضًا. لدي Win10 و PgAdmin4. كيف يمكنني حل هذه المشكلة؟

ما هو إصدار PG الذي تستخدمه؟ في حالة PG 11.0 ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis

تحقق من التشفير و SRID

ما هو إصدار PG الذي تستخدمه؟ في حالة PG 11.0 ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis

تحقق من التشفير و SRID

ما هو إصدار PG الذي تستخدمه؟ في حالة الإصدار 11.0 من PG ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis

ما هو إصدار PG الذي تستخدمه؟ في حالة PG 11.0 ، قمت بإعادة تسمية ملف dll معين ثم أعد تثبيت postgis


PostGIS

PostGIS is an extension for PostgreSQL providing spatial capabilities for both vector and raster data. In spatial database-land it is unequalled in the sheer range of functions it makes available, their ease of use, and speed (it's written in C).

Seriously, don't waste your time with any other database.

Getting up and running is easy on any platform, with installers available for Windows, brew install or Postgres.app on OSX, and packages available for all of the major Linux distros. For those inclined to Docker there are pgAdmin is available across all operating systems (and often comes bundled with PostgreSQL anyway).

Oh - and Amazon RDS for PostgreSQL comes with PostGIS already installed if for some reason you need that level of scalability.

MySQL? SQL Server? وآخرون.

These are not the spatial databases you're looking for.

Ok, fine - من الناحية الفنية you do have spatial functionality in some of the other popular databases.

SQL Server, MySQL, Azure SQL, GeoDB or HatBox for H2, neo4j-spatial for neo4j, and DynamoDB all have spatial support of some kind.

Quite a few words have been written comparing spatial databases, so you might want to take a look before committing yourself to one or another.

tldr Avoid MySQL for anything spatial!

PostGIS may give you the heavy lifting power to do analysis, but staring at database rows trying to make sense of your results can be made so much easier by visualising them. Enter QGIS - a free and open source cross-platform Geographic Information System with the ability to create, edit, visualise, analyse, and publish spatial information.

Thanks to being built on top of GDAL (amongst others) QGIS is capable of reading and writing almost any format of spatial data that you can throw at it - including direct connections to PostGIS databases.


Rasters store data in pixel grids:
each pixel (or زنزانة) stores a single value.*


*Trivia: لا أحد is still a value.

Rasters can be useful for:

Raster GIS data is the same as "regular" digital images, just with location data attached.

What rasters are good for

Rasters are really good at representing information that uniformly covers a broad area (e.g., elevation).

For everything else, there's.


جدول المحتويات

  1. صفحة عنوان الكتاب
  2. حقوق النشر والاعتمادات
    1. Learning Geospatial Analysis with Python Third Edition
    1. لماذا الاشتراك؟
    1. نبذة عن الكاتب
    2. About the reviewer
    3. Packt is searching for authors like you
    1. لمن هذا الكتاب
    2. ما يغطي هذا الكتاب
    3. To get the most out of this book
      1. Download the example code files
      2. Download the color images
      3. Conventions used
      1. المراجعات
      1. متطلبات تقنية
      2. Geospatial analysis and our world
      3. History of geospatial analysis
      4. نظم المعلومات الجغرافية
      5. الاستشعار عن بعد
      6. Elevation data
      7. بمساعدة الكمبيوتر الصياغة
      8. Geospatial analysis and computer programming
        1. Object-oriented programming for geospatial analysis
        1. Thematic maps
        2. الفهرسة المكانية
        3. البيانات الوصفية
        4. Map projections
        5. استدعاء
        1. Images as data
        2. Remote sensing and color
        1. Data structures
          1. Geospatial rules about polygons
          1. Band math
          2. كشف التغيير
          3. الرسم البياني
          4. ميزة استخراج
          5. Supervised and unsupervised classification
          1. Getting started with Python
          2. Building a SimpleGIS
            1. Setting up the data model
            2. Rendering the map
            1. Getting an overview of common data formats
            2. Understanding data structures
              1. Common traits
              1. Spatial indexing algorithms
                1. Quadtree index
                2. R-tree index
                1. ملفات الأشكال
                2. CAD files
                3. Tag-based and markup-based formats
                4. GeoJSON
                5. GeoPackage
                1. TIFF files
                2. JPEG, GIF, BMP, and PNG
                3. Compressed formats
                4. ASCII Grids
                5. World files
                1. LIDAR
                1. متطلبات تقنية
                2. Understanding data access
                  1. جدال
                    1. GDAL and raster data
                    2. GDAL and vector data
                    1. The PROJ projection library
                    2. CGAL
                    3. JTS
                    4. GEOS
                    5. PostGIS
                    6. Other spatially enabled databases
                      1. Oracle Spatial and Graph
                      2. ArcSDE
                      3. خادم مايكروسوفت SQL
                      4. MySQL
                      5. SpatiaLite
                      6. GeoPackage
                      1. Esri Network Analyst and Spatial Analyst
                      2. pgRouting
                      1. الكم GIS
                      2. OpenEV
                      3. العشب GIS
                      4. gvSIG
                      5. OpenJUMP
                      6. جوجل إيرث
                      7. NASA WorldWind
                      8. ArcGIS
                      1. Python's pycsw Library
                      2. GeoNode
                      3. GeoNetwork
                      1. متطلبات تقنية
                      2. Installing third-party Python modules
                      3. Python virtualenv
                      4. Conda
                      5. Installing GDAL
                        1. شبابيك
                        2. لينكس
                        3. macOS X
                        1. The Python urllib module
                        2. The Python requests module
                        3. بروتوكول نقل الملفات
                        1. The minidom module
                        2. ElementTree
                        3. Building XML using ElementTree and Minidom
                        4. نص معروف جيدًا (WKT)
                        1. The json module
                        2. The geojson module
                        1. متطلبات تقنية
                        2. Measuring distance
                          1. Using the Pythagorean theorem
                          2. Using the haversine formula
                          3. Using the Vincenty formula
                          1. Accessing the shapefile
                            1. Reading shapefile attributes
                            2. Reading shapefile geometry
                            1. Merging shapefiles with dbfpy
                            1. Subsetting spatially
                            1. The point-in-polygon formula
                            2. Bounding box selections
                            3. Attribute selections
                            1. Dot density calculations
                            2. Choropleth maps
                            3. Using spreadsheets
                            4. Creating heat maps
                            1. متطلبات تقنية
                            2. Swapping image bands
                            3. Creating histograms
                            4. Performing a histogram stretch
                            5. Clipping images
                            6. Classifying images
                            7. Extracting features from images
                            8. Understanding change detection
                            9. ملخص
                            10. قراءة متعمقة
                            1. Accessing ASCII Grid files
                              1. Reading grids
                              2. Writing grids
                              1. Creating a grid from the LIDAR data
                              2. Using PIL to visualize LIDAR data
                              3. Creating a triangulated irregular network
                              1. متطلبات تقنية
                              2. Creating a normalized difference vegetative index
                                1. Setting up the framework
                                2. Loading the data
                                3. Rasterizing the shapefile
                                4. Clipping the bands
                                5. Using the NDVI formula
                                6. Classifying the NDVI
                                7. Additional functions
                                8. Loading the NDVI
                                9. Preparing the NDVI
                                10. Creating classes
                                1. The flood fill function
                                2. Predicting flood inundation
                                1. The simple A* algorithm
                                2. Generating the test path
                                3. Viewing the test output
                                4. The real-world example
                                5. Loading the grid
                                6. Defining the helper functions
                                7. The real-world A* algorithm
                                8. Generating a real-world path
                                1. متطلبات تقنية
                                2. Limitations of real-time data
                                3. Using real-time data
                                4. Tracking vehicles
                                  1. The NextBus agency list
                                  2. The NextBus route list
                                  3. NextBus vehicle locations
                                  4. Mapping NextBus locations
                                  1. متطلبات تقنية
                                  2. Understanding a typical GPS report
                                  3. Building a GPS reporting tool
                                    1. الإعداد الأولي
                                    2. Working with utility functions
                                    3. Parsing the GPX
                                    4. Getting the bounding box
                                    5. Downloading map and elevation images
                                    6. Creating the hillshade
                                    7. Creating maps
                                    8. Locating the photo
                                    9. Measuring elevation
                                    10. Measuring distance
                                    11. Retrieving weather data
                                    1. Leave a review - let other readers know what you think

                                    The idea for creating a PostGIS course came to us after preparing custom SQL courses for Uber. These included topics on processing geographical data in SQL.

                                    We thought that processing geographical data in a database was an interesting topic to cover in a SQL course. You can visualize your query results on a map seeing real world objects on a map is a lot of fun.

                                    Finding the geographical data suitable for the course was a challenge. We wanted to find data for real-world objects to make the course realistic. On the other hand, we wanted to keep the data sets small, by showing the data on the map to avoid sending gigabytes of data back and forth between the server and the user browser. In the end, we found data for local attractions in San Francisco, as well as data about the boundaries of U.S. states and their respective capitals.

                                    I remember we had to redo a significant portion of the course. The first version of the course, which we did not release, was very theoretical and not a lot of fun.

                                    We want our SQL courses to be realistic. So, we reworked the course to make the tasks more business-like, and this is the version we have published.


                                    شاهد الفيديو: سعد الدين العثماني وشهادة مهندس معماري الشرف لمريم أمجون