أكثر

الشروع في استخدام رسم المنشور على أشكال CrowdSource على الخريطة

الشروع في استخدام رسم المنشور على أشكال CrowdSource على الخريطة


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


باستخدام CartoDB

البرنامج التعليمي من مدونة CartoDB


بالاعتماد على الموارد المرتبطة في إجابة توماس هورنر ، كتبت مثالًا بسيطًا / برنامج تعليمي على جيثب باستخدام المنشور و CartoDB. بعض النقاط الرئيسية أدناه.

وظائف SQL المخصصة

من أجل عدم الكشف علنًا عن مفتاح API الخاص بك (والسماح لأي شخص بفعل أي شيء لبياناتك) ، يجب عليك كتابة وظيفة SQL مخصصة في CartoDB لتمكين الإجراءات المحددة التي تريدها على طاولتك. على سبيل المثال ، لإدراج الأشكال الهندسية بالإضافة إلى اسم المستخدم ووصف لما تم رسمه على الجدولخريطة الحشود الأساسية، اكتب ما يلي في علامة تبويب SQL المخصصة

DROP FUNCTION IF EXISTS insert_crowd_mapping_data (نص ، نص ، نص) ؛ - يفترض أنه يتم إدخال قيمة واحدة فقط إنشاء أو استبدال وظيفة insert_crowd_mapping_data (_geojson TEXT ، _description TEXT ، _name TEXT) - يجب أن تُرجع شيئًا ما لاستخدامه في عبارة "SELECT" RETURNS RETURNS عدد صحيح مثل $$ DECLARE _the_geom GEOMETRY ؛ ابدأ - قم بتحويل GeoJSON إلى نوع هندسي للإدخال. _the_geom: = ST_SetSRID (ST_GeomFromGeoJSON (_geojson) ، 4326) ؛ تنفيذ "INSERT INTO Crowdmap_basic (the_geom، description، name) VALUES ($ 1، $ 2، $ 3) 'USING _the_geom، _description، _name؛ العودة 1 ؛ نهاية؛ $$ LANGUAGE plpgsql محدد الأمان ؛ - امنح حق الوصول إلى المستخدم العام منح التنفيذ على FUNCTION insert_crowd_mapping_data (نص ، نص ، نص) TO publicuser ؛

أرسل Leaflet.draw البيانات باستخدام AJAX

انظر إلى Leaflet.draw الوثائق الخاصة بالعمل مع Leaflet ، أو يمكنك استخدام البرنامج التعليمي لمايك فوستر. في المثال الخاص بي بعد الانتهاء من كل رسمsetData ()يتم استدعاء الوظيفة ، والتي تقوم أولاً بتحويل العنصر المرسوم إلى GeoJSON لتمريرها إلى استعلام SQL (ملاحظة.geometryبعد.toGeoJSON ()، الكود الموجود في البرنامج التعليمي CartoDB غير صحيح)

drawItems.eachLayer (الوظيفة (الطبقة) {// قم بتحويل الرسم إلى GeoJSON لتمريره إلى قاعدة بيانات CartoDB sql var drawing = "" "+ JSON.stringify (layer.toGeoJSON (). geometry) +" ""؛ // أنشئ استعلام SQL لإدخال البيانات من المعلمات الثلاثة: الرسم // ، واسم مستخدم الإدخال ، ووصف الإدخال للشكل المرسوم var sql = "SELECT" + cartoDBinsertfunction + "(" ؛ sql + = الرسم ؛ sql + = "،" + inputDescription؛ sql + = "،" + إدخال اسم المستخدم ؛ sql + = ") ؛" ؛

ثم أضف استعلام SQL إلى مكالمة AJAX لتمرير البيانات إلى جدول CartoDB

// TODO: التغيير إلى اسم المستخدم الخاص بك var cartoDBusername = "raphaeld" // إرسال البيانات $ .ajax ({type: 'POST' ، url: 'https: //'+cartoDBusername+'.cartodb.com/api/v2/ sql '، crossDomain: true، data: {"q": sql}، dataType:' json '، Success: function (responseData، textStatus، jqXHR) {console.log ("تم حفظ البيانات") ؛} ، خطأ: وظيفة ( responseData، textStatus، errorThrown) {console.log ("مشكلة في حفظ البيانات")؛}})؛

شاهد الفيديو: كيفية وضع مقياس الرسم و اتجاه الشمال فى الخريطة على برنامج arc