2010-07-16 15 views
5

मैं सिर्फ एक सीधा, सी # कक्षा खोजना चाहता हूं जो प्रारंभिक अक्षांश और देशांतर और दूरी लेता है और बाध्यकारी बॉक्स (अधिकतम लेट, मिनट लेट, अधिकतम लोन, मिनट लोन) पाता है। SO पर अन्य समान, समान प्रश्न हैं, लेकिन उनमें से कोई वास्तव में इसका उत्तर नहीं देता है और जो लोग सी # में नहीं हैं।अक्षांश और देशांतर बाध्यकारी बॉक्स?

सहायता।

+5

में कुछ संबंधित पोस्ट के माध्यम से देख रहे हैं, वहाँ एक साथ सी # में अपने स्वयं के कार्यान्वयन टुकड़ा करने के लिए पर्याप्त जानकारी और संदर्भ की तुलना में अधिक प्रतीत होता है। अगर आप किसी के लिए कोड लिखने के लिए कह रहे हैं ताकि आपको ऐसा करने की ज़रूरत नहीं है, तो आपको यहां बहुत भाग्य नहीं हो सकता है। –

+0

पदों के विशिष्ट लिंक के बिना मैं आपकी टिप्पणी को खुशी से अनदेखा कर दूंगा। मैंने अपनी खोज पूरी की है, यह यहां C# –

+4

में नहीं है, ठीक है, मुझे आपके लिए इस पृष्ठ के दाईं ओर संबंधित लिंक के पहले प्रतिलिपि बनाने दें। http://stackoverflow.com/questions/1648917/given-a-latitude-and-longitude-and-distance-i-want-to-find-a-bounding-box उस के माध्यम से दबाएं और आप जावा में कार्यान्वयन के संदर्भ में कम से कम, साथ ही समस्या के गणितीय दृष्टिकोण पर कुछ लेख खोजें। आपको अपनी इच्छित सटीक भाषा में सटीक कार्यान्वयन नहीं मिल रहा है। विचार यह है कि इसके बारे में सोचने में सहायता प्राप्त करें, लोगों को आपके लिए सोच और कोडिंग न करें, फिर संकलित करने वाली पहली श्रेणी का उपयोग करें। –

उत्तर

9

यहाँ आप के लिए क्या पूछ रहे हैं है। फेडेरिको ए रैम्पोनी के लिए कुडोस जिन्होंने पायथन here में मूल लिखा था।

public class MapPoint 
{ 
    public double Longitude { get; set; } // In Degrees 
    public double Latitude { get; set; } // In Degrees 
} 

public class BoundingBox 
{ 
    public MapPoint MinPoint { get; set; } 
    public MapPoint MaxPoint { get; set; } 
}   

// Semi-axes of WGS-84 geoidal reference 
private const double WGS84_a = 6378137.0; // Major semiaxis [m] 
private const double WGS84_b = 6356752.3; // Minor semiaxis [m] 

// 'halfSideInKm' is the half length of the bounding box you want in kilometers. 
public static BoundingBox GetBoundingBox(MapPoint point, double halfSideInKm) 
{    
    // Bounding box surrounding the point at given coordinates, 
    // assuming local approximation of Earth surface as a sphere 
    // of radius given by WGS84 
    var lat = Deg2rad(point.Latitude); 
    var lon = Deg2rad(point.Longitude); 
    var halfSide = 1000 * halfSideInKm; 

    // Radius of Earth at given latitude 
    var radius = WGS84EarthRadius(lat); 
    // Radius of the parallel at given latitude 
    var pradius = radius * Math.Cos(lat); 

    var latMin = lat - halfSide/radius; 
    var latMax = lat + halfSide/radius; 
    var lonMin = lon - halfSide/pradius; 
    var lonMax = lon + halfSide/pradius; 

    return new BoundingBox { 
     MinPoint = new MapPoint { Latitude = Rad2deg(latMin), Longitude = Rad2deg(lonMin) }, 
     MaxPoint = new MapPoint { Latitude = Rad2deg(latMax), Longitude = Rad2deg(lonMax) } 
    };    
} 

// degrees to radians 
private static double Deg2rad(double degrees) 
{ 
    return Math.PI * degrees/180.0; 
} 

// radians to degrees 
private static double Rad2deg(double radians) 
{ 
    return 180.0 * radians/Math.PI; 
} 

// Earth radius at a given latitude, according to the WGS-84 ellipsoid [m] 
private static double WGS84EarthRadius(double lat) 
{ 
    // http://en.wikipedia.org/wiki/Earth_radius 
    var An = WGS84_a * WGS84_a * Math.Cos(lat); 
    var Bn = WGS84_b * WGS84_b * Math.Sin(lat); 
    var Ad = WGS84_a * Math.Cos(lat); 
    var Bd = WGS84_b * Math.Sin(lat); 
    return Math.Sqrt((An*An + Bn*Bn)/(Ad*Ad + Bd*Bd)); 
} 
+0

यहां आधासाइडइनकेएम क्या है? –

+0

@ धर्मिक भंडारी: यह आपके इच्छित बाउंडिंग बॉक्स की आधा लंबाई है। –

+0

क्या मुझे केएम में दूरी पारित करनी चाहिए? –

-1

यदि आपके पास केवल प्रारंभिक अक्षांश, देशांतर और ऊंचाई है, तो कोई बाध्यकारी बॉक्स नहीं है क्योंकि आपने केवल अंतरिक्ष में एक बिंदु को परिभाषित किया है। किसी भी आयताकार/बाध्यकारी बॉक्स को कम से कम दो बिंदुओं को परिभाषित करने के लिए इसकी आवश्यकता होगी!

+0

हाँ, लेकिन यही दूरी है ... उस बिंदु के चारों ओर बाउंडिंग बॉक्स को बिंदु के साथ त्रिज्या के रूप में दूरी के साथ – samiq

+0

'बिंदु से त्रिज्या के रूप में दूरी' के साथ जानकारी के बिना प्रश्न बताए गए हैं। भौगोलिक बिंदुओं का उपयोग करते समय दूरी आमतौर पर ऊंचाई (पृथ्वी से दूरी) को संदर्भित करेगी। यदि आपके पास पॉइंट लैट और एलएनजी और कोई ऊंचाई नहीं है तो आप फिट करने के लिए बॉक्स को कैसे संभवतः गणना कर सकते हैं !? – Fraser

4

मुझे पता है कि मैं दो साल के पुराने प्रश्न को पुनर्जीवित कर रहा हूं, लेकिन अगर कोई यहां Google से आता है, तो मैंने एक सी # कक्षा पुस्तकालय लिखा है जो वास्तव में यह और थोड़ा और करता है। मैंने कोड होस्ट करने के लिए Github repository बनाया है और जल्द ही इसे कवर करने वाला ब्लॉग पोस्ट लिख रहा होगा।

Geolocation repository

+1

धन्यवाद स्कॉट, इस कोड को काफी उपयोगी पाया। –

+0

शायद एक और प्रोजेक्ट देखना चाहें जो पूरे Google मानचित्र एपीआई को लपेटता है न कि केवल जियोकोडिंग: https://github.com/maximnovak/google-maps। – Pete

+0

फोर्किंग के लायक हो सकता है असल में यह रेपो Google एपीआई का लाभ नहीं उठाता है। यह दूरी, दिशा, बाध्यकारी बक्से इत्यादि को निर्धारित करने के लिए गणितीय सूत्रों का उपयोग करता है। हालांकि, एक संबंधित जियोकोडिंग एपीआई मैंने लिखा है (जो कि गीथूब पर भी है) जो जियोकोडिंग स्थानों को संभालता है। मैं आपके द्वारा वर्णित रेपो की जांच करूंगा, दिलचस्प। धन्यवाद! – Scott

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