কিউজিএফাইন (বা অন্য পদ্ধতি) দিয়ে কিউজিআইএস-এ একটি ভেক্টর স্তর ঘোরানো হচ্ছে?


10

আমি কিউজিআইএস-এ ভেক্টর পয়েন্টের একটি সেট কেন্দ্রীয় বিন্দুর (বা স্বেচ্ছাসেবী বিন্দু) চারপাশে একটি নির্বিচার সংখ্যক ডিগ্রি ঘোরানো চাই।

এটি নিয়মিত গ্রিড তৈরি করা সম্পর্কে সাম্প্রতিক প্রশ্নের অনুরূপ ; পয়েন্টগুলির গ্রিডটি একটি স্বেচ্ছাসেবী কোণ বা দূরত্বকে ঘোরানো বা স্থানান্তর করার জন্য "এফাইন ট্রান্সফর্মেশন" সরঞ্জামটি (যা আমি মনে করি প্লাগিনটি বোঝায়) ব্যবহার করার পরামর্শ দেওয়া হয়েছিল। আমি সন্দেহ করি যে এটি কীভাবে কাজ করে তা আমি বুঝতে পারছি না এবং এটি কাজ করতে সক্ষম হয় নি।

আমি কিউজিআইএস-তে পয়েন্টগুলির নিয়মিত গ্রিড তৈরি করি এবং এটি নিশ্চিত করি যে ইউটিএম জোনটি স্তর এবং প্রকল্প উভয়ের জন্য সঠিকভাবে সেট করা আছে, স্তরটির সম্পাদনা সক্ষম করে, তারপরে প্লাগইন ডায়ালগ (কিউজএফাইন) খুলুন: অ্যাফাইন ট্রান্সফর্মেশন ডায়ালগ

আমি 'পুরো স্তরটি' নির্বাচন করি এবং তারপরে, পয়েন্টের পুরো ক্ষেত্রটি 15 by দ্বারা ঘোরানো চাই, উভয় 'ঘূর্ণন' বাক্সে 15 রেখে (যা জিনিসগুলি ভুল হতে চলেছে)। অপারেশনের ফলে কোথাও অফ গ্রহের পয়েন্টগুলি ঘোরানো যায়!

এটি কি কাজের উপযুক্ত সরঞ্জাম? আমি আদর্শভাবে তাদের সাধারণ কেন্দ্র সম্পর্কে পয়েন্টগুলির একটি সেট ঘোরানো চাই।

আপডেট : কিউজিএফাইন কেবল একটি চিন্তা; আমরা যদি কোনও কিউজিআইএস সরঞ্জামে এটি করতে পারি তবে আমি খুশি হব!

আপডেট 2 : কিগসএফাইনটি ব্যবহারযোগ্য যদি আপনি প্লাগ ইন করার জন্য সঠিক নম্বরগুলি জানেন তবে (নীচে উত্তর দেখুন, মাইককে ধন্যবাদ!) স্প্রেডশিট / ক্যালকুলেটর সূক্ষ্মভাবে কাজ করে, বা এখানে সরাসরি নম্বরগুলি পেতে আর ফাংশনটি রয়েছে:

## Compute correct affine numbers for qgsAffine plugin
affine <- function(originX, originY, rotAngle) {
  A <- rotAngle * pi / 180
  scaleX <- scaleY <- cos(A)
  rotX <- sin(A)
  rotY <- -sin(A)
  transX <- originX - cos(A) * originX + sin(A) * originY
  transY <- originY - sin(A) * originX - cos(A) * originY
  aff <- data.frame(scaleX, scaleY, rotX, rotY, transX, transY)
  return(aff)
}

সুতরাং, উত্তর উগান্ডা (UTM 36N) এর পয়েন্টগুলির একটি গ্রিড ঘোরানোর জন্য, affine(578988, 419210, 30)দেয়:

     scaleX    scaleY rotX rotY   transX    transY
1 0.8660254 0.8660254  0.5 -0.5 287174.7 -233330.5

... যা, কিউজেসফাইন ডায়ালগটিতে প্রবেশ করে, পয়েন্টগুলি সঠিকভাবে ঘোরায়।


চমৎকার আর অভিযোজন!
মাইক টি

উত্তর:


10

আপনি এই পোস্টটি এসআইএফাইন ব্যবহার করে পোস্টজিআইএস এ করতে পারেন । একটি স্বেচ্ছাসেবী বিন্দুর চারপাশে ঘোরানোর কার্যকারিতা SGRotate PostGIS 2.0 এর জন্য যুক্ত করা হয়েছিল ।

আপনার যদি পূর্ববর্তী সংস্করণ থাকে (যেমন PostGIS 1.5, বা তারও আগের), আপনি এই ফাংশনগুলি যুক্ত করতে পারেন:

CREATE OR REPLACE FUNCTION st_rotate(geometry, double precision, geometry)
  RETURNS geometry AS
'SELECT ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1, ST_X($3) - cos($2) * ST_X($3) + sin($2) * ST_Y($3), ST_Y($3) - sin($2) * ST_X($3) - cos($2) * ST_Y($3), 0)'
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;
COMMENT ON FUNCTION st_rotate(geometry, double precision, geometry) IS 'args: geomA, rotRadians, pointOrigin - Rotate a geometry rotRadians counter-clockwise about an origin.';

CREATE OR REPLACE FUNCTION st_rotate(geometry, double precision, double precision, double precision)
  RETURNS geometry AS
'SELECT ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1,    $3 - cos($2) * $3 + sin($2) * $4, $4 - sin($2) * $3 - cos($2) * $4, 0)'
  LANGUAGE sql IMMUTABLE STRICT
  COST 100;
COMMENT ON FUNCTION st_rotate(geometry, double precision, double precision, double precision) IS 'args: geomA, rotRadians, x0, y0 - Rotate a geometry rotRadians counter-clockwise about an origin.';

সেন্ট্রয়েড (সাধারণ কেন্দ্র) সহ কোনও এক্স , ওয়াই পয়েন্টের আশেপাশে জ্যামিতিটি ঘোরানোর জন্য কীভাবে এটি ব্যবহার করতে হয় সে সম্পর্কে ধারণা পেতে ST_Rotate- এ উদাহরণ দেখুন ।

যেহেতু আমরা সবাই গণিত পছন্দ করি, উপরের ফাংশনগুলি থেকে রূপান্তর ম্যাট্রিক্স হিসাবে উপস্থাপিত হয়:

[ cos(θ)  | -sin(θ)  ||  x0 - cos(θ) * x0 + sin(θ) * y0 ]
[ sin(θ)  |  cos(θ)  ||  y0 - sin(θ) * x0 - cos(θ) * y0 ]

কোথায় θ একটি উৎপত্তি সম্পর্কে ঘড়ির কাঁটার বিপরীতে ঘূর্ণন হয়, x0 উৎপত্তি বিন্দু Easting / দ্রাঘিমাংশ, এবং y0 উত্তরমুখী / অক্ষাংশ হয়। এই গণিতটি সম্ভবত কোনও অ্যাফাইন ট্রান্সফর্মেশন সরঞ্জামের সাথে মানিয়ে নেওয়া যেতে পারে ।


কিউজএফাইন সরঞ্জামটি ব্যবহার করতে, আপনাকে বুঝতে হবে যে ম্যাট্রিক্সের মানগুলি কোথায় প্রবাহিত হয়। প্রাক-গণনা করার জন্য একটি ভাল স্প্রেডশিট টেম্পলেট প্রয়োজন। কিউজএফাইন ডায়ালগটি এরকম কিছু দেখায়:

              X   Y
            +---+---+
      Scale | a | e |
            +---+---+
   Rotation | d | b |
            +---+---+
Translation | c | f |
            +---+---+

কোথায়:

  • a : cos (θ)
  • বি : -সিন (θ)
  • c : x0 - cos (θ) * x0 + sin (θ) * y0
  • d : পাপ (θ)
  • : কোস (θ)
  • f : y0 - sin (θ) * x0 - cos (θ) * y0

উদাহরণস্বরূপ, আপনি যদি বহুভুজ 30 42 ঘড়ির কাঁটার দিকে 42 ° S, 174 ° E এর চারদিকে ঘুরতে চান তবে আপনার স্প্রেডশিটে আপনার ইনপুটগুলি এখানে:

  • x0 = 174
  • y0 = -42
  • θ = -30 ডিগ্রি বা -0.523598776 রেডিয়ান

তারপরে, স্প্রেডশিট থেকে ডান বাক্সে ফলাফলগুলি অনুলিপি / অনুলিপি করুন। ডায়লগ থেকে ট্যাব ক্রমটি ব্যবহার করে:

  • a: 0.866025404
  • d: -0.5
  • সি: 44.31157974
  • e: 0.866025404
  • বি: 0.5
  • চ: 81.37306696

qgsAffine

পোস্টজিআইএস-এর একই উদাহরণটি দেখতে এমন কিছু হবে:

SELECT ST_Rotate(geom, -30*pi()/180, 174.0, -42.0)

দেখতে বেশ সুন্দর লাগছে; আমরা যদি স্পটিয়ালাইটে এটি করতে পারি তবে এটি 'কিউজিআইএস-তে এটি করার মতো যোগ্যতা অর্জন করবে' যেহেতু আমরা কিজিআইএস প্লাগইনগুলির মাধ্যমে স্প্যাটিয়ালাইট ফাইলগুলিতে এসকিউএল চালাতে পারি; পোস্টজিআইএস হ'ল আমি প্রবেশ করতে চাই না এমন ব্যবহারকারীদের জন্য ইনস্টলেশনের আরও একটি সম্পূর্ণ পদক্ষেপ হবে। কোনও ধারণা যদি স্থানিক কোনও ফাংশন পাশাপাশি সেন্ট্রয়েডের চারদিকে ঘুরতে পারে?
সিম্বামাঙ্গু

আহা, আমি কিংসএফাইনকে অপ্রকাশিত, এখন প্রত্যাশিত হিসাবে কাজ করে ... যদিও স্প্রেডশীট থেকে প্রচুর অনুলিপি / আটকানো হয়েছে
মাইক টি

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

আমি এটি জাভাস্ক্রিপ্টের সাথে খাপ খাইয়ে নেওয়ার চেষ্টা করেছি: এটি এখানে দেখুন , জেএসফিলও
ফ্ল্যাশএন্ড

1
উপরে জাভাস্ক্রিপ্ট ফাংশন গণনা করাতে আমি আমার affine পরামিতিগুলি গণনা করতে এবং সফলভাবে সোম ভেক্টরগুলি ঘোরানোর জন্য সক্ষম হয়েছি, তবে এটি এতটা ব্যবহারকারী-বান্ধব নয়: ঘূর্ণন কেন্দ্রের স্থানাঙ্কগুলি পেতে আপনাকে স্থানাঙ্ক ক্যাপচার প্লাগইন ব্যবহার করতে হবে, তারপরে রূপান্তর পরামিতিগুলি গণনা করতে হবে এবং কপি করে পেস্ট করতে হবে QGis! প্লাগইন নিজেই গণনা করে এবং ব্যবহারকারীরা ঘূর্ণন কেন্দ্রের স্থানাঙ্কগুলিতে প্রবেশ করতে এবং একটি ঘূর্ণন কোণ নির্ধারণ করতে ক্লিক করলে এটি অনেক সহজ হতে পারে।
ব্র্যাডিপাস

2

আমি কিউজিএফাইন ব্যবহার করে ভেক্টর স্তরগুলি ঘোরানোর কোথাও কোথাও পাইনি এবং আমি মনে করি যে আমি একা নই। এই প্রশ্নটি সম্প্রতি কিউজিআইএস ফোরামে উঠে আসে এবং (ফ্রি) ওপেনজ্যাম্প ব্যবহার করে একটি সমাধান পাওয়া যায়। এই থ্রেডটি দেখুন (শেষের দিকে):

http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02

অবশ্যই আপনি এই সরঞ্জামটি কেবল আপনার ডেটার একটি সাধারণ ঘূর্ণন করতে ব্যবহার করতে পারেন।

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