से एक एसक्यूएलजीओजी पॉलीगॉन-सर्कल बनाएं, मैं सी # का उपयोग कर एक एसक्यूएल-सर्वर 2008 भूगोल क्षेत्र में एक सर्कल को सहेजना चाहता हूं।एक केंद्र और त्रिज्या
सी # में अक्षांश, एक रेखांश और त्रिज्या है लेकिन मुझे बहुभुज की गणना करने का कोई तरीका नहीं मिल रहा है जो सर्कल का प्रतिनिधित्व करेगा और SqlGeography
इसे से बनाएगा।
private List<Coordinate> getCirclePoints(Coordinate center, int radius, int speed) //speed 1: draws 360 sides, 2 draws 180 etc...
{
var centerLat = (center.Latitude * Math.PI)/180.0; //rad
var centerLng = (center.Longitude * Math.PI)/180.0; //rad
var dist = (float)radius/6371.0; //d = angular distance covered on earth's surface
var circlePoints = new List<Coordinate>();
for (int x = 0; x <= 360; x += speed)
{
var brng = x * Math.PI/180.0; //rad
var latitude = Math.Asin(Math.Sin(centerLat) * Math.Cos(dist) + Math.Cos(centerLat) * Math.Sin(dist) * Math.Cos(brng));
var longitude = ((centerLng + Math.Atan2(Math.Sin(brng) * Math.Sin(dist) * Math.Cos(centerLat), Math.Cos(dist) - Math.Sin(centerLat) * Math.Sin(latitude))) * 180.0)/Math.PI;
circlePoints.Add(new Coordinate((latitude * 180.0)/Math.PI, longitude));
}
return circlePoints;
}
और फिर एक parsable स्ट्रिंग को यह List<Coordinate>
बदलने की कोशिश:
मैं समारोह निम्नलिखित बहुभुज बनाने के लिए करने की कोशिश की
var s = "POLYGON((" + string.Join(",", points.ConvertAll(p => p.Longitude + " " + p.Latitude).ToArray()) + "))";
var poly = SqlGeography.STPolyFromText(new System.Data.SqlTypes.SqlChars((SqlString)s), 4326);
लेकिन यह हमेशा शिकायत बहुभुज हो गया है एक गोलार्ध पर, जहां मुझे यकीन है कि यह मामला है।
क्या मैं सही रास्ते पर हूं? क्या ऐसा करने के लिए कोई अन्य (सरल) तरीका है?
बहुत सराहना की महोदय, धन्यवाद! – EdGs
यह बहुत उपयोगी था, इसके लिए धन्यवाद। थोड़ा और पढ़ने के बाद, मैंने सोचा कि यह कहना उचित होगा कि .01 सहिष्णुता मूल्य 33 प्वाइंट पॉलीगॉन (मानक एसक्यूएल भू सर्कल) के परिणामस्वरूप होगा। अगर कुछ त्रुटि स्वीकार्य है, तो बड़े मूल्य का उपयोग करके उपयोग किया जा सकता है। मैं अपने त्रिज्या को 5 से 50 मीटर तक कहीं भी होने की उम्मीद कर रहा हूं, इसलिए मैं दक्षता में सुधार के लिए अपने सहनशीलता मूल्य के लिए 3 का उपयोग कर रहा हूं। –
आपकी टिप्पणी के लिए धन्यवाद मैंने अभी कुछ परीक्षण चलाए और मेरी सहिष्णुता को 0.08 में बदल दिया जो छोटे-आश त्रिज्या के लिए 16 पक्ष बहुभुज देने लगता है। – Johann