এসকিউএল ২০০ for-এর জন্য বহুভুজ "হ্যান্ডনেস" পরিবর্তন করুন (বহুভুজ ভার্টেক্স ক্রমের বিপরীতে)


11

আমি এসকিউএল ২০০৮ এ যাওয়ার চেষ্টা করছি এমন কয়েক হাজার পয়েন্ট নিয়ে আমার কয়েকটি কয়েকশ আকার ( polygonগুলি এবং multipolygonগুলি) রয়েছে।

দুর্ভাগ্যক্রমে, আমি যে আকারগুলি আমদানির চেষ্টা করেছি সেগুলি হ'ল "ডানহাতি" (প্রত্যেকটির পরিধি এটির পয়েন্টগুলির চারদিকে ঘড়ির কাঁটা আঁকানো হয়)। এসকিউএল সার্ভার অন্তত geographyপ্রকারের জন্য "বাম-হাত" আকারগুলি (অভ্যন্তরের চারপাশে অ্যান্টি-ক্লকওয়াইজ) ধারণ করে । এর অর্থ এসকিউএল ধরে নিয়েছে যে আমি আমার আকৃতি বাদে পুরো পৃথিবীটি নির্বাচন করার চেষ্টা করছি । কিছু লোক এটিকে "অভ্যন্তরীণ" আকার হিসাবে বর্ণনা করে।

এমএসডিএন থেকে , যা হতাশ হয়ে বলে না যে কোনটি রিংয়ের দিকনির্দেশনা ব্যবহার করা উচিত:

আমরা যদি geographyস্থানিক দৃষ্টান্তটি সংরক্ষণ করতে ডেটা টাইপ ব্যবহার করি তবে আমাদের অবশ্যই রিংটির ওরিয়েন্টেশন নির্দিষ্ট করতে হবে এবং উদাহরণের অবস্থানটি সঠিকভাবে বর্ণনা করতে হবে।

আপনি যদি এসকিউএল ২০০ in-তে ভুল রিং ওরিয়েন্টেশন ব্যবহার করেন তবে এটি নিম্নলিখিত ত্রুটি (জোর দিয়ে খনি) দিয়ে ক্র্যাশ হয়:

ব্যবহারকারী-সংজ্ঞায়িত রুটিন বা সামগ্রিক "ভূগোল" সম্পাদনের সময় একটি। নেট ফ্রেমওয়ার্ক ত্রুটি ঘটেছিল: মাইক্রোসফ্ট.এসএলসি সার্ভার.টাইপস.গ্লারগ্রুমেন্ট এক্সপেশন: 24205: নির্দিষ্ট ইনপুটটি বৈধ ভূগোলের উদাহরণটিকে উপস্থাপন করে না কারণ এটি একটি একক গোলার্ধকে অতিক্রম করে। প্রতিটি ভৌগোলিক উদাহরণ অবশ্যই একক গোলার্ধের ভিতরে ফিট করতে হবে fit এই ত্রুটির একটি সাধারণ কারণ হ'ল একটি বহুভুজের ভুল রিং ওরিয়েন্টেশন রয়েছে।

সূক্ষ্মভাবে কাজ করার geometryপরিবর্তে আকারগুলি আমদানি করা geography, তবে আমি geographyযদি পারি তবে তা ব্যবহার করতে চাই ।

এসকিউএল ২০১২-এ, এই সমস্যাটি সমাধান করার জন্য এটি মোটামুটি তুচ্ছ দেখা যাচ্ছে, তবে আমি ২০০৮ এর সাথে আবদ্ধ।

আমি কীভাবে আকারগুলি রূপান্তর করব?


1
+1 দুর্দান্ত প্রশ্ন ... আপনার কি এমন কোনও লিঙ্ক আছে যেখানে এটিতে বলা হয়েছে যে সিকিএল সার্ভারটি বাম-হাতের আকারগুলি ধরেছে?
কर्क কুইকেনডাল

কিরক ধন্যবাদ অফিসিয়াল ডকুমেন্টেশনগুলি খুঁজে পেতে আমার সমস্যা হচ্ছে, তবে আমি এমএসডিএন এর সাথে লিঙ্ক করতে পারি যেখানে এটি "রিং ওরিয়েন্টেশন" বিষয়গুলি বলেছে (যদিও এটি কোন উপায়টি ব্যবহার করবেন তা বলে না)। ক্রাশ হওয়ার সাথে সাথে আমি যে ত্রুটিটি পেয়েছি তাও রেখে দেব।
মাইকেল - ক্লে শির্কি কোথায়

উত্তর:


14

স্পেশাল এডের ব্লগের একটি সংক্ষিপ্ত সমাধান ছিল। রূপান্তরটি প্রদর্শন করে এমন কিছু এসকিউএল এখানে রয়েছে:

DECLARE @geom GEOMETRY = 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))';
DECLARE @geog GEOGRAPHY = @geom.MakeValid().STUnion(@geom.STStartPoint()).STAsText()

এবং এডের পোস্টের একটি অংশ:

এই আচরণের মূল উপায় হল STUnion()পদ্ধতি। যেহেতু এটি একটি ওজিসি-ভিত্তিক পদ্ধতি, কোনও প্রদত্ত বৈশিষ্ট্যের জন্য পুরো জ্যামিতির উপর কাজ করে, এটি পদ্ধতির জন্য প্রয়োজনীয় প্রাচ্যকরণে বহুভুজকে বাধ্য করে। যা কেবল এই Geographyধরণের জন্য ব্যবহৃত হয় [[]]। ওভারহেড ছোট রেখে এই চিত্রিত চিত্রিতটি বেশ দক্ষ [...]।


2
SQL সার্ভার 2008 R2, আমি STUnion (এর ভেতরের .MakeValid () করা না করার জন্য) পাশাপাশি কাজ করার জন্য এই পেতে ছিল: (। @ Geom.MakeValid () STStartPoint ()) .STUnion
ক্রিস স্মিথ

@ স্মিটি এটি যে ক্ষেত্রে এসকিউএল অন্যথায় প্রারম্ভিক পয়েন্ট নির্ধারণ করতে পারে না তার জন্য অর্থবোধ করে। আবার যদি আকারটি নিজের বা অন্যান্য প্রতিকূল পরিস্থিতিতে ডাবল হয়ে যায়?
মাইকেল - ক্লে শিরকি

হ্যাঁ আমার পরিস্থিতিতে আকৃতিটি হতাশ এবং নিজেই ওভারল্যাপিং।
ক্রিস স্মিথ

0

> = এসকিউএল সার্ভার ২০১২-তে, রিরিয়েন্টবজেক্ট () পদ্ধতিটি এটি সম্পাদন করবে। <এসকিউএল সার্ভার ২০১২-এর জন্য নীচে একটি বিকল্প পদ্ধতি।

একটি বিদ্যমান এসকিউএল ভূগোল @ জি-এর জন্য, নীচের কোডগুলি পয়েন্টগুলি বের করবে এবং বিপরীত ক্রমে পয়েন্টগুলি (শীর্ষগুলি) দিয়ে একটি বহুভুজটি পুনরায় তৈরি করবে:
(দ্রষ্টব্য 1: সরল বহুভুজের জন্য কাজ করে, রিং / সেন্ট্রয়েড সহ বহুভুজ বা বহুভুজের জন্য নয়)
(দ্রষ্টব্য 2: এসআরআইডি 4326 (ডাব্লুজিএস 84) সমন্বয় ব্যবস্থা ব্যবহার করে)

--For existing geography @g
DECLARE @GeometryText varchar(max), @ReversedPolygon geography
DECLARE @GeometryType varchar(20) = 'POLYGON', @Count int
SET @Count = @g.STNumPoints()
WHILE @Count > 0
BEGIN
    SET @GeometryText = @GeometryText + CONVERT(varchar(30),CONVERT(decimal(12,8),@g.STPointN(@Count).Long)) + ' ' + CONVERT(varchar(30),CONVERT(decimal(12,8),@g.STPointN(@Count).Lat))
    SET @Count = @Count - 1
    IF @Count > 0 SET @GeometryText = @GeometryText + ','
END
SET @GeometryText = @GeometryType +'((' + @GeometryText + '))'
SET @ReversedPolygon = geography::STGeomFromText(@GeometryText, 4326); 

0

দেখে মনে হচ্ছে এসকিউএল সার্ভার স্পেসিয়াল সরঞ্জামগুলি থেকে আমি এসকিউএল এবং সি # এর কিছু অপরিষ্কার সংকর ব্যবহার করতে পারি , স্ট্যাক ওভারফ্লোতে পরামর্শ হিসাবে ।

দ্রষ্টব্য: এই উত্তরটি পোস্ট করার সময়, সেখানে খুব বেশি তথ্য ছিল না। আপনার যদি অন্য কোনও কিছুর জন্য ইতিমধ্যে এসকিউএল সার্ভার স্থানিক সরঞ্জামের প্রয়োজন না হয় তবে এই পদ্ধতিটি ব্যবহার করে দেখুন না। পরিবর্তে, অন্য যে কোনও একটি উত্তর এখানে বা স্ট্যাক ওভারফ্লোতে চেষ্টা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.