मैं एक 3 पैरामीटर जियोट्रांसफॉर्मेशन और एसक्यूएल सर्वर 2012 में प्रक्षेपण कैसे करूं?


10

मेरे पास एक तालिका है जिसमें अक्षांश देशांतर (NAD27) कॉलम हैं। मैं वेब मर्केटर (WGS84) स्थान का प्रतिनिधित्व करते हुए दो अन्य कॉलम, X और Y की गणना करता हूं।

वर्तमान में मैं अध्ययन क्षेत्र के लिए अनुशंसित जियोट्रांसफॉर्म को लागू करके, ऐसा करने के लिए एक आर्कमैप का उपयोग कर रहा हूं - 3 पैरामीटर (जियोसेंट्रिक) जियोट्रांसफॉर्मेशन - NAD27 से WGS84 तक जाने के लिए।

मैं इसे पूरी तरह से Sql Server 2012 के भीतर करना चाहूंगा। जो मैं बता सकता हूं, उससे Sql सर्वर बॉक्स से बाहर डेटम ट्रांसफॉर्मेशन का समर्थन नहीं करता है। क्या कोई Sql लाइब्रेरी के बारे में जानता है जो इस जियोट्रांसफॉर्मेशन का समर्थन करती है? मैं केवल Sql में उसी गुणांक का उपयोग करना चाहूंगा जिसका उपयोग मैं वर्तमान में आर्कमैप में कर रहा हूं।

मुझे WGS84 लैट / लांग से वेब मर्चेंट में प्रोजेक्ट करने की भी आवश्यकता है। मैं इस सूत्र को जावास्क्रिप्ट में कार्यान्वित देखता हूं , लेकिन अगर किसी के पास Sql संग्रहित प्रक्रिया है जो ऐसा करती है, तो यह बहुत अच्छा होगा।


मेरी जानकारी के लिए डेटम ट्रांसफॉर्मेशन के लिए फिलहाल कोई काम करने वाला ओओ समाधान नहीं है। डेटाबेस में इसे बनाने का सबसे आसान तरीका sharpmap.codeplex.com lib- का उपयोग करेगा या मौजूदा कोड लेगा और इसे T-SQL में रूपांतरित करेगा जिसे मैंने कोशिश की ...
simplexio

@simplexio धन्यवाद, टी-SQL रूपांतरण के साथ कोई भाग्य?
कर्क कुक्केंडल

आप अपने परिवर्तित निर्देशांक कितने सही चाहते हैं? या सटीकता क्या इतना ही मायने रखती है?
मिनिटक्स

@ मिन्टक्स मैं उन्हीं परिणामों को पुन: प्रस्तुत करना चाहूंगा जिन्हें वर्तमान में मैं आर्कमैप का उपयोग कर रहा हूं।
कर्क कुक्केंडल

1
अनिच्छित कार्य होना। यदि आप PostGIS में db को बदल सकते हैं, तो इसमें पुनः-इंस्ट्रूमेंटेशन समर्थन है। MS SQL सर्वर अच्छा db हो सकता है और उसे अच्छा सपोर्ट मिल सकता है, लेकिन जब हम प्री-मेड टूल्स पर बात कर रहे होते हैं, तो उसे पोस्टग्रेजेक को खो देता है
simplexio

जवाबों:


5

SQL के लिए जावास्क्रिप्ट के बारे में, यह संभव है कि आप इसे कैसे संभालेंगे:

SELECT  FromX, 
        FromY, 
        CASE WHEN FromX > 180 THEN NULL ELSE FromX * 0.017453292519943295 * 6378137.0 END AS mercatorX_lon2,
        CASE WHEN FromY > 90 THEN NULL ELSE 3189068.5 * LOG((1.0 + SIN(FromY * 0.017453292519943295)) / (1.0 - SIN(FromY * 0.017453292519943295))) END AS mercatorY_lat2
FROM TABLENAME

मुझे लगता है कि निम्नलिखित आपके पहले प्रश्न का उत्तर देंगे। इसके लिए काफी त्रुटि जाँच की आवश्यकता होगी। सहायता करने के लिए, आप यहां मूल समीकरण पा सकते हैं: http://www.colorado.edu/geography/gcraft/notes/datum/gif/molodens.gif

--fromTheta :column --radians
--fromLamda :column --radians
--fromH     :column --meters

DECLARE @fromA float = 6378206.4        --radius of earth, meters
DECLARE @fromF float =1.0/294.9786982   --Flattening
DECLARE @toA float =6378137.0           --radius of earth, meters
DECLARE @toF float = 1.0/298.257223563  --Flattening
DECLARE @dA float = @toA - @fromA       --change in equatorial radius
DECLARE @dX float = -8.0                --change in X, meters
DECLARE @dY float = 160.0               --change in Y, meters
DECLARE @dZ float = 176.0               --change in Z, meters
DECLARE @dF float = @toF-@fromF         --change in flattening
DECLARE @fromES float = 2.0*@fromF - @fromF*@fromF --first eccentricity squared
DECLARE @bda float = 1.0-@fromF         --polar radius divided by equatorial radius

--RM = (@fromA*(1-@fromES)/POWER(1-@fromES*sin(fromTheta)*sin(fromTheta), 1.5))

--RN = (@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta)))

SELECT 

((((-@dX*sin(fromTheta)*cos(fromLamda)-@dY*sin(fromTheta)*sin(fromLamda))+@dZ*cos(fromTheta))+@dA*(@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta)))*@fromES*sin(fromTheta)*cos(fromTheta)/@fromA)+@df*((@fromA*(1-@fromES)/POWER(1-@fromES*sin(fromTheta)*sin(fromTheta), 1.5))/@bda+(@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta)))*@bda)*sin(fromTheta)*cos(fromTheta))/((@fromA*(1-@fromES)/POWER(1-@fromES*sin(fromTheta)*sin(fromTheta), 1.5)) + fromH) AS deltaTheta,
(-@dX*sin(fromLamda)+@dY*cos(fromLamda))/((((@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta))) +fromH) * cos(fromTheta)) AS deltaLamda,
@dX*cos(fromTheta)*cos(fromLamda)+@dY*cos(fromTheta)*sin(fromLamda)+@dZ*sin(fromTheta)-@da*@fromA/(@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta)))+@dF*@bda*(@fromA/SQRT(1.00-@fromES*sin(fromTheta)*sin(fromTheta)))*sin(fromTheta)*sin(fromTheta) AS deltaH

FROM TABLENAME

संपादित करें: एक युगल चर जो स्तंभ नाम और एक लापता कॉमा और कोष्ठक होना चाहिए था।

संपादित करें: एक और कोष्ठक।

मैंने इस सूत्र का परीक्षण किया है और यह आर्कजीआईएस ट्रांसफॉर्म के खिलाफ यादृच्छिक बिंदुओं का उपयोग करके काम करता है। याद रखें कि आपकी इकाइयाँ पैरों / डिग्री में हो सकती हैं। यह भी याद रखें कि ये परिणाम डेल्टा हैं, इसलिए आपको अपने अंतिम परिणामों को प्राप्त करने के लिए उन्हें अपने मूल्यों के खिलाफ जोड़ना होगा।


1
धन्यवाद, मुझे लगता है कि XYZ डेल्टास को अक्षांश से बदलने के बाद लागू करने की आवश्यकता होती है, XYZ अंतरिक्ष में लंबे समय तक जहां XY और Z अक्ष उत्पत्ति पृथ्वी के केंद्र में है।
किर्क कुएकेन्डल

Im उस gif को प्रिंट करने जा रहा हूं, और इसे मेरी डेस्क के सामने की दीवार में फ्रेम कर दूंगा।
nickves

@KirkKuykendall यह विधि निरस्त मोलोडेन्स्की है, जहां आपके द्वारा वापस प्राप्त डेल्टास वास्तव में चाप-सेकंड में हैं और आपके लक्ष्य डेटम में अनुवाद प्राप्त करने के लिए आपके प्रारंभिक अक्षांश / देशांतर पर लागू किया जा सकता है। मुझे आपके AOI का पता नहीं है, लेकिन NAD27-> WGS84 से प्राप्त करने का तरीका आमतौर पर कम से कम सटीक (लेकिन सबसे आसान) है।
मिंटेक्स

यह भी ध्यान रखें @dX @dY @dZकि NAD_1927_To_WGS_1984आपके द्वारा चुनी गई भूगर्भीय पद्धति के आधार पर, भिन्न हो सकते हैं ।
22

1

यह एक समान प्रश्न का लिंक है:

http://sqlspatialtools.codeplex.com/discussions/286893

मुझे लगता है कि पहला जवाब यह समझने के लिए उपयोगी हो सकता है कि आप SQL सर्वर में क्या कर सकते हैं और क्या नहीं कर सकते हैं और अपनी समस्या को हल करने के लिए कुछ तरीकों को जान सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.