यदि आप कोई स्थानिक गणना करने की योजना बना रहे हैं, तो EF 5.0 LINQ अभिव्यक्तियों की अनुमति देता है जैसे:
private Facility GetNearestFacilityToJobsite(DbGeography jobsite)
{
var q1 = from f in context.Facilities
let distance = f.Geocode.Distance(jobsite)
where distance < 500 * 1609.344
orderby distance
select f;
return q1.FirstOrDefault();
}
फिर भूगोल का उपयोग करने का एक बहुत अच्छा कारण है।
एंटिटी फ्रेमवर्क के भीतर स्थानिक की व्याख्या ।
उच्च प्रदर्शन वाले स्थानिक डेटाबेस बनाना के साथ अपडेट किया गया
जैसा कि मैंने नोएल अब्राहम्स उत्तर पर नोट किया :
तो भंडारण प्रकारों की तुलना करना:
CREATE TABLE dbo.Geo
(
geo geography
)
GO
CREATE TABLE dbo.LatLng
(
lat decimal(15, 12),
lng decimal(15, 12)
)
GO
INSERT dbo.Geo
SELECT geography::Point(12.3456789012345, 12.3456789012345, 4326)
UNION ALL
SELECT geography::Point(87.6543210987654, 87.6543210987654, 4326)
GO 10000
INSERT dbo.LatLng
SELECT 12.3456789012345, 12.3456789012345
UNION
SELECT 87.6543210987654, 87.6543210987654
GO 10000
EXEC sp_spaceused 'dbo.Geo'
EXEC sp_spaceused 'dbo.LatLng'
परिणाम:
name rows data
Geo 20000 728 KB
LatLon 20000 560 KB
भूगोल डेटा-प्रकार 30% अधिक स्थान लेता है।
इसके अतिरिक्त भूगोल डेटाटाइप केवल एक बिंदु को संग्रहीत करने तक सीमित नहीं है, आप भी स्टोर कर सकते हैं। LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString, और MultiPolygon और बहुत कुछ . एक बिंदु से परे (उदाहरण के लिए LINESTRING(1 1, 2 2) उदाहरण के लिए) भूगोल के सबसे सरल प्रकारों (अक्षांश/लंबे) को संग्रहीत करने का कोई भी प्रयास प्रत्येक बिंदु के लिए अतिरिक्त पंक्तियों को शामिल करेगा, प्रत्येक बिंदु के क्रम के लिए अनुक्रमण के लिए एक कॉलम और लाइनों के समूहन के लिए एक और कॉलम। SQL सर्वर में भूगोल डेटा प्रकारों के लिए विधियाँ भी हैं जिनमें Area, Boundary, की गणना करना शामिल है। लंबाई, दूरियां, और बहुत कुछ ।
Sql सर्वर में अक्षांश और देशांतर को दशमलव के रूप में संग्रहीत करना नासमझी है।
अपडेट 2
यदि आप दूरी, क्षेत्रफल आदि जैसी कोई गणना करने की योजना बना रहे हैं, तो पृथ्वी की सतह पर इनकी ठीक से गणना करना कठिन है। SQL सर्वर में संग्रहीत प्रत्येक भूगोल प्रकार को स्थानिक संदर्भ आईडी के साथ भी संग्रहीत किया जाता है। . ये आईडी अलग-अलग गोले की हो सकती हैं (पृथ्वी 4326 है)। इसका मतलब है कि SQL सर्वर में गणना वास्तव में पृथ्वी की सतह पर सही ढंग से गणना करेगी (इसके बजाय as- कौवा मक्खियों जो पृथ्वी की सतह के माध्यम से हो सकता है)।