2012-07-30 11 views
8

सी # के साथ एएसपी.नेट एमवीसी 3 का उपयोग करना मेरे पास एक नक्शा प्रदर्शित करने के लिए एक वेब पेज है जिस पर मैं कई अक्षांश और देशांतर निर्देशांक वाली पॉलीलाइन जोड़ना चाहता हूं। के साथ जावास्क्रिप्ट लाइब्रेरी आप GeoJson परतों को जोड़ सकते हैं। मैं सी # में डेटाबेस से रेखांश और अक्षांश निर्देशांक प्राप्त करना चाहता हूं और बनाने के लिए जावास्क्रिप्ट में निर्देशांक की सूची पास करना चाहता हूं GeoJson या GeoJsonएएसपी.नेट एमवीसी कंट्रोलर से GeoJson डेटा प्राप्त करने के लिए अजाक्स कॉल

var polyline = { 
     "type": "Feature", 
     "geometry": { 
     "type": "LineString", 
        "coordinates": [ 
         [-105.00341892242432, 39.75383843460583], 
         [-105.0008225440979, 39.751891803969535] … 
        ] 
       }, 
     "properties": { 
     "popupContent": "This is a polyline of many coordinates.", 
     "underConstruction": false 
     } 
}; 

मैं GeoJSON ऊपर दिखाए गए के समान बना सकते हैं कैसे और "निर्देशांक" से सी # या जावास्क्रिप्ट अनुभाग के लिए स्थान डेटा को जोड़ने:

यहाँ GeoJSON का एक उदाहरण मैं बनाना चाहते है और उसके बाद इस तरह के रूप में एक परत जोड़ने के लिए जावास्क्रिप्ट में उपयोग:

var myLayer = L.geoJson().addTo(map); 
myLayer.addData(polyline); 

मैं GeoJSON.net उपयोग शुरू कर दिया है और इस कोड के साथ आए हैं:

foreach (Position point in Positions) 
{ 
    coordinates.Add(point); 
} 

GeoJSON.Net.Geometry.LineString line = new GeoJSON.Net.Geometry.LineString(coordinates); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

var data = serializer.Serialize(lineString); 

लेकिन मुझे नहीं पता कि इस GeoJSON LinseString ऑब्जेक्ट को सी # से जावास्क्रिप्ट में कैसे पास किया जाए। मैं इस तरह के रूप Json का उपयोग कर इसे पारित करने में असमर्थ था:

return Json(data, JsonRequestBehavior.AllowGet); 
+0

आपको JavaScriptSerializer के बजाय JSON.NET serializer का उपयोग करने का प्रयास करना चाहिए। इसके अलावा यदि आप उपरोक्त की तरह अपने नियंत्रक के अंदर क्रमबद्ध कर रहे हैं, तो आपको एक ContentResult वापस करना चाहिए, क्योंकि JsonResult भी serialization निष्पादित करता है। नीचे दिए गए मेरे उत्तर में कुछ कोड जोड़ा गया है। –

उत्तर

3

बस GeoJSON.NET पर संक्षिप्त देखा और यह JSON.NET का उपयोग करता है, तो आप JSON.NET serializer उपयोग करने के लिए जब आप अपने परिणाम लौटने की जरूरत है (JSON.NET विशेषताओं के बारे में .NET में JSON serializer नहीं जानता है।) करने के लिए इस तुम सिर्फ क्रमानुसार सकता करते हैं और इस तरह एक ContentResult वापसी (यह परीक्षण किया है नहीं):

var line = new GeoJSON.Net.Geometry.LineString(coordinates); 
string json = JsonConvert.SerializeObject(line); 
return Content(json, "application/json"); 

या बेहतर आप a custom JSON.NET ActionResult इस्तेमाल कर सकते हैं।

एक तरफ नोट पर, an issue with serialization of polygons not complying with the GeoJSON specification लगता है - यह सुनिश्चित नहीं है कि यह पॉलिलाइन को भी प्रभावित करता है। लेकिन तथ्य यह है कि इसे एक वर्ष में तय नहीं किया गया है, जो एक जियोजसन लाइब्रेरी के लिए अच्छा वादा नहीं करता है। प्रोजेक्ट छोड़ दिया प्रतीत होता है।

हमने nettopologysuite में जियोजसन सीरियलाइजेशन का उपयोग करने का विकल्प चुना, जो मुझे याद है कि बॉक्स से सीधे काम करता है।

+0

फॉलो अप के रूप में, पुस्तकालय अब पूर्ण समर्थन करता है बहुभुज serialization/deserialization। अगर आपको कोई समस्या मिलती है तो बस गिटहब पर कोई समस्या बनाएं और मैं इसे एएसएपी को ठीक करने की कोशिश करूंगा। –

1

मैं वास्तव में इस के लिए एक जादुई गोली नहीं है, लेकिन मेरा मानना ​​है कि मैं कम से कम सही दिशा में बात कर सकते हैं।

यदि आप पोस्टग्रेस/पोस्टजीआईएस का उपयोग कर रहे हैं, तो आप ST_AsGeoJson फ़ंक्शन का उपयोग केवल डेटाबेस से सीधे GeoJson को वापस करने के लिए कर सकते हैं, जो आसान है। अन्यथा आप JSON.NET देखकर शुरू करना चाहेंगे, जो एएसपी एमवीसी के लिए डीफैक्टो मानक जेएसओएन सीरियलाइजेशन लाइब्रेरी है। मैंने इसे थोड़ा पूर्ण होने के लिए पाया, और मैंने यह समझने के लिए पर्याप्त गहराई से नहीं पहुंचाया कि आप थोड़ी परिचितता प्राप्त करने से आगे कैसे आगे बढ़ सकते हैं।

इसके अलावा, ऐसा लगता है कि JSON.NET के लिए एक जियोज़सन प्लगइन है जिसमें Nuget Package और संबंधित GitHub repo है। मैंने इसे व्यक्तिगत रूप से उपयोग नहीं किया है, इसलिए मैं इसकी स्थिरता/फीचर सेट इत्यादि के लिए बिल्कुल सही नहीं हो सकता, लेकिन किसी भी घटना में यह एक अच्छा कूद बिंदु हो सकता है।

उम्मीद है कि इससे मदद मिलती है, और मुझे यह जानने में दिलचस्पी होगी कि आप क्या खत्म कर रहे हैं!

+0

जियोज़सन में फीचर और ज्यामिति क्लास है, इसलिए केवल ResponseJson को पास करने के लिए फ़ीचरकोलेक्शन ऑब्जेक्ट को भरने वाले सभी डेटा के साथ वापस लौटना चाहिए। मैं फीचर को ढूंढने के लिए देख रहा हूं GeoJosn – Mohit

संबंधित मुद्दे