أكثر

قم بتمرير GeoJSON من .NET إلى Javascript

قم بتمرير GeoJSON من .NET إلى Javascript


يتيح تطبيق My .NET / OpenLayers / GeoServer / PostGres-PostGIS للمستخدمين إنشاء استعلامات مخصصة للحصول على البيانات من جداول PostGIS الخاصة بي.

يتم استدعاء الاستعلامات في .NET (وليس javascript) باستخدام طريقة ويب باستخدام استعلام SQL التالي:

حدد "tract_name" ، ST_AsGeoJSON ("geom") من a_postgis_table ؛

يعمل الاستعلام بشكل جيد عند تشغيله في نافذة PostGres SQL.

كيف يمكنني تمرير نتائج PostGIS ، بما في ذلك عمود GeoJSON ، والعودة إلى javascript / openlayer من طريقة الويب .NET بحيث يمكن لـ OpenLayers عرض طبقة المتجه في الخريطة؟ يجب أن يكون هناك شيء بسيط حقًا أفتقده هنا. يبدو أن هذا يجب أن يكون شيئًا شائعًا للغاية يحتاج الناس إلى القيام به.


أعتقد أن هناك ثلاثة أجزاء للحصول على الحل الخاص بك.

  1. تكوين مجموعة ميزات GeoJSON
  2. استعادة FeatureArray من .NET
  3. تستهلك ذلك على العميل

1) مجموعة ميزات GeoJSON. أسهل طريقة (IMHO) هي كتابة استعلام Postgresql للقيام بذلك. يوجد دليل هنا حول كيفية القيام بذلك ، ولكن ، بافتراض أن tract_name فريد من نوعه ، يمكن أن يكون استعلامك شيئًا كالتالي:

حدد row_to_json (fc) من (حدد 'FeatureCollection' كنوع ، array_to_json (array_agg (f)) كميزات FROM (حدد 'Feature' As type ، ST_AsGeoJSON (lg.geom) :: json as geometry ، row_to_json (lp) as properties من a_postgis_table كـ lg INNER JOIN (حدد tract_name من a_postgis_table) كـ lp ON lg.tract_name = lp.tract_name) As f) As fc ؛

2) خدمة .NET هناك العديد من الطرق للقيام بذلك ، لكنني قمت بذلك في الماضي باستخدام WCF / svc إذا كانت المصطلحات الخاصة بي صحيحة. إليك رسم تخطيطي صغير لـ VB:

 _  _ الوظيفة العامة GetTracts () ككود دفق لتعيين ميزة Postgresql الخاصة بك في سلسلة dim json مثل String = "" 'إخراج sql WebOperationContext.Current.OutgoingResponse.ContentType = "application / json؛ charset = utf-8" Dim ms كـ MemoryStream = New MemoryStream (Encoding.UTF8.GetBytes (json)) إرجاع ms End Function

3) احصل عليه في OpenLayers (يعمل مع الإصدار 2)

أفترض أنك قمت بإنشاء طبقة متجه فارغة في OpenLayers تسمى "myTracts". يمكنك فعل شيء مثل هذا:

var request = OpenLayers.Request.POST ({url: serviceUrl، data: '{}'، headers: {// contentType: "text / simple" "Content-Type": "application / json؛ charset = utf-8" } ، رد الاتصال: onGeoJsonLoadSuccess}) ؛ دالة onGeoJsonLoadSuccess (data) {// بافتراض أن بيانات الخادم الخاصة بك موجودة في lon / lat var geojson_format = new OpenLayers.Format.GeoJSON ({'internalProject': map.baseLayer.project، 'externalProject': OpenLayers.Project ("EPSG: 4326 ")}) ؛ // قد ترغب في تفريغ الميزات أولاً ... myTracts.addFeatures (geojson_format.read (data)؛}

لست على دراية بـ .NET ، ولكن إذا كنت قادرًا على تعديل DOM من طريقة .NET ، فيمكنك كتابة البيانات إلى div مخفي يتم تسجيل مستمع للتغيير عليه. على سبيل المثال باستخدام jQuery:

$. ("# data"). bind ('contentchanged'، function () {// do something with data)}؛

عندما يبدأ الحدث ، يتم تشغيل الوظيفة ويمكنك التعامل مع البيانات. هناك طريقة أخرى تتمثل في كتابة البيانات إلى ملف وتحميلها باستخدام AJAX. لكلتا الطريقتين ، تحتاج إلى تعديل DOM ، على الرغم من أنك تحتاج إلى السماح لـ JavaScript الآن بالتحميل.


يمكنك استخدام جافا سكريبت لتحويل قائمة .Net الخاصة بك إلى JSON أو GeoJson.

GeoJsonList يشير إلى قائمة في البيانات

var serializer = new JavaScriptSerializer () ؛ var serializedResult = serializer.Serialize (GeoJsonList) ،

شاهد الفيديو: 02 04 Просмотр файлов JSON - js and AJAX