পয়েন্ট (এক্স, ওয়াই) এবং জিওমপ্রোম টেক্সট ("পয়েন্ট (এক্সওয়াই)") এর মধ্যে পার্থক্য কী?


17

আমি আমার মাইএসকিউএল ডাটাবেসে কিছু জ্যামিতিক অবস্থান সঞ্চয় করতে চাই। এর জন্য আমি পিনটি ডেটাটাইপ ব্যবহার করি। প্রায় সর্বত্রই আমি পড়লাম যে ফাংশনটি GeomFromTextটেবিলে ডেটা toোকাতে ব্যবহার করা উচিত।

যাইহোক, আমি এটি POINT(X,Y)কাজ করেও জানতে পেরেছি । GeomFromTextপরিবর্তে কেন ব্যবহার করা উচিত সে সম্পর্কে আমি কোনও বিবরণ পাইনি POINT

উদাহরণস্বরূপ আমার নীচের সহজ সম্পর্ক রয়েছে:

CREATE TABLE Site (
    SiteID      BIGINT UNSIGNED,
    Position    POINT
);

এবং আমি নিম্নলিখিত দুটি রূপ ব্যবহার করে মান সন্নিবেশ করতে পারি:

INSERT INTO Site (
    1,
    GeomFromText( 'POINT(48.19976 16.45572)' )
);

INSERT INTO Site (
    2,
    POINT(48.19976, 16.45572)
);

আমি যখন টেবিলটি SELECT * FROM Siteদেখি ( ) আমি অবস্থানটির জন্য একই বাইনারি ব্লব দেখতে পাই এবং যখন স্থানাঙ্কগুলি ( SELECT *, AsText(Position) FROM Site) দেখি তখন আমিও একই মান দেখতে পাই।

তাহলে কেন জেমফ্র্যামটেক্সট ব্যবহার করা উচিত? এই দুটি রূপের মধ্যে কোনও (জ্ঞাত) পারফরম্যান্স পার্থক্য রয়েছে? এটি মাইএসকিউএল ছাড়া অন্যান্য ডাটাবেস সিস্টেমে কীভাবে সমাধান করা যায়?


পারফরম্যান্সের কোনও পার্থক্য আছে কিনা আমি জানি না (আমি অনুমান করব না তবে এটি কেবল অনুমান)। অক্ষাংশ এবং দ্রাঘিমাংশের মানগুলিকে অন্য টেবিল থেকে রূপান্তর করার সময় দ্বিতীয় পদ্ধতিটি সহজ হবে। INSERT INTO Site (Position) SELECT POINT(latitude, longitude) FROM tmpচেয়ে সহজ...SELECT GeomFromText(CONCAT('POINT(',latitude,' ',longitude,')' )) ...
ypercubeᵀᴹ

আমি দ্বিতীয় ভেরিয়েন্টটি নির্মাণে আরও সহজভাবে খুঁজে পেয়েছি, সে কারণেই আমি ভাবছি যে মাইএসকিউএল স্থানিক এক্সটেনশনগুলি যেখানে ব্যবহার করেছি সেখানে প্রায় সর্বত্রই প্রথম ব্যবহৃত হয়।
ComSubVie

আমি কেবল উভয় ভেরিয়েন্ট ব্যবহার করে উপরের সারণীতে 10.000.000 অবস্থান সন্নিবেশ করানোর চেষ্টা করেছি এবং কোনও পরিমাপযোগ্য পারফরম্যান্সের পার্থক্য সনাক্ত করতে পারি নি।
ComSubVie

অনুগ্রহ করে মাইএসকিউএল 8+ এর আলোকে এবং উত্তরোত্তর
ইভান ক্যারল

উত্তর:


16

মাইএসকিউএল স্থানিক এক্সটেনশান সম্পর্কিত দুটি ভিন্ন বাইনারি ফর্ম্যাট রয়েছে , মানদণ্ডগুলি থেকে "সুপরিচিত বাইনারি" (ডাব্লু কেবি) ফর্ম্যাট এবং মাইএসকিউএল অভ্যন্তরীণ GEOMETRYডেটা টাইপ।

মাইএসকিউএল 5.1.35 এর আগে, POINT()মাইএসকিউএল অভ্যন্তরীণ ডেটা টাইপ ফেরত দেয় না এর মতো ফাংশনগুলি ; তারা ডব্লুকেবি ফিরিয়েছিল ... তার আগে তার আগে আপনাকে এই কাজটি করতে হয়েছিল:

INSERT INTO t1 (pt_col) VALUES (GeomFromWKB(Point(1,2)));

তবে এখন, যেমন আপনার উদাহরণ হিসাবে এটি কাজ করে:

INSERT INTO t1 (pt_col) VALUES(Point(1,2));

বিকাশকারীদের কৃতিত্বের সাথে, যখন তারা পরিবর্তিত হয় Point()এবং অনুরূপ ফাংশনগুলি (আরও বুদ্ধিমানভাবে) প্রত্যাবর্তনের GEOMETRYবস্তুগুলিতে আসে তখন তারা GeomFromWKB()ডাব্লুকেবি বা মাইএসকিউএল জ্যামিতির ডেটাগুলিকে ইনপুট হিসাবে গ্রহণ করার অনুমতি দেয় এবং অনুরূপ ফাংশনগুলি ডাব্লুকেবিকে ইনপুট হিসাবে গ্রহণ করার উদ্দেশ্যে তৈরি করা হয়।

নতুন সার্ভারগুলিতে 1 ম পদ্ধতিটি (প্রযুক্তিগতভাবে ভুল হওয়া সত্ত্বেও) কাজ করে এবং দ্বিতীয় পদ্ধতিটি মাইএসকিউএল 5.1.35 এর পূর্বে কোনওভাবেই কাজ করে না এই বিষয়টি ব্যাখ্যা করতে পারে যে আপনি যে পদ্ধতিটি দেখেছেন সেগুলি ব্যবহার করে উদাহরণগুলি কেন লেখা হয়েছিল - বিষয়টি পুরোপুরি এড়িয়ে চলুন। নাহলে ... আমার কাছে কিছুই নেই, এখানে।

সংক্ষিপ্তকরণ এবং তারপরে পাঠ্যকে পার্সিং করা ফাংশনগুলির চেয়ে স্বজ্ঞাতভাবে ধীর এবং আরও ত্রুটি-প্রবণ বলে মনে হচ্ছে যাতে সঠিক পরিবর্তনশীলগুলি ইনপুট হিসাবে গ্রহণ করে, তাই আমি সংক্ষিপ্ত স্ট্রিংগুলি খাঁজতে এবং পাঠ্য-ভিত্তিক ফাংশনগুলি ব্যবহার করার কোনও কারণ ভাবতে পারি না।

http://dev.mysql.com/doc/refman/5.1/en/creating-spatial-values.html#gis-wkb-functions

http://dev.mysql.com/doc/relnotes/mysql/5.1/en/news-5-1-35.html


1
ধন্যবাদ, আকর্ষণীয় যে এটি প্রকাশের নোটগুলিতে এবং "ডকুমেন্টেশনে কোথাও" পাদটীকা হিসাবে উল্লেখ করা হয়েছে। সুতরাং আমি পাঠ্য ভিত্তিক পদ্ধতি থেকে দূরে থাকব।
ComSubVie

1
কেন এটি 5 বছর পরে মাইএসকিউএল ডক্স এখনও T_োকানোর সময় ST_GeomFromText () ফাংশনটি ব্যবহারের উদাহরণ দেয়? এই উত্তর এখনও প্রাসঙ্গিক? এটি কিছুটা বিভ্রান্তিমূলক .. dev.mysql.com/doc/refman/5.7/en/populating-spatial-collays.html
ম্যাট কিরান

1
@ ম্যাটকিয়েরান ডাব্লুকেবি এবং ডব্লিউকেটি ভূগর্ভীয় ডেটা প্রকাশের জন্য মানকযুক্ত, উন্মুক্ত ফর্ম্যাটগুলি। উদাহরণগুলি সেগুলি ব্যবহার করে কারণ স্ট্যান্ডার্ড-ভিত্তিক জিওপ্যাটিয়াল অ্যাপ্লিকেশনগুলি ইতিমধ্যে এই ফর্ম্যাটগুলিতে ডেটা ধারণ করতে পারে, মাইএসকিউএলকে ST_GeomFromText()জ্যামিতি অবজেক্ট তৈরির দেশীয় এসকিউএল ফাংশনগুলি ব্যবহার করার জন্য বাহ্যিক অ্যাপ্লিকেশনগুলির প্রয়োজনের পরিবর্তে একক যুক্তি হিসাবে এবং অনুরূপ রূপান্তর ফাংশন হিসাবে বহিরাগত জ্যামিতিগুলি গ্রহণ করতে দেয় which স্থানিক ফাংশন রেফারেন্স পাওয়া যায় । ডকগুলি আরও ভালভাবে সংগঠিত করা যেতে পারে।
মাইকেল - বর্গ

এছাড়াও @ ম্যাটকিইরান এই উত্তরটি এখনও সেই অর্থে প্রাসঙ্গিক যে এটি ব্যাখ্যা করে যে কেন পুরানো উদাহরণগুলি ডক্সগুলি নির্দেশ করে তার বিপরীতে লিখিত হতে পারে, মাইএসকিউএল আপাত ধরণের মিলের সাথে এইভাবে কাজ করে যা এইভাবে ফাংশনগুলি ব্যবহার করে তা বোঝায় বলে মনে হয়। নেটিভ এসকিউএল ফাংশন, ডাব্লুকেবি (বাইনারি), বা ডাব্লুকেটি (পাঠ্য) - তিনটি পদ্ধতিই বৈধ। কি আর কোনো প্রয়োজন নেই নেটিভ ফাংশন রিটার্ন মান convering হয় থেকে WKB, কারণ তাদের প্রত্যাবর্তন ধরনের আর WKB হিসাবে তারা অনেক বছর আগে ছিল।
মাইকেল - স্কলবট

4

মাইএসকিউএল 8+

উত্তরসূরির জন্য কেবল এটিই গুরুত্বপূর্ণ that

  • Point(X,Y)নির্ভুলতার সাথে সংখ্যার জন্য নির্মাতা এবং এটি দ্রুত তৈরি করে পাঠ্যে রূপান্তর করার প্রয়োজন হয় না। এটি A POINTবা ব্যর্থ ফেরত পাওয়ার গ্যারান্টিযুক্ত । আপনি যদি এটির মতো ভাবতে চান এটি এটি দৃ strongly ়ভাবে টাইপ করে।
  • সুপরিচিত পাঠ্য (ডাব্লুকেটি) নির্মাণকারী: এগুলি সর্বদা ধীর হয়, কারণ সুপরিচিত পাঠ্য (ডব্লু কেটি) পার্স করার জন্য তাদের একটি অতিরিক্ত পদক্ষেপের প্রয়োজন হয় । পুরানো সংস্করণে ST_নোটগুলি উপসর্গ ছাড়া পাওয়া যাবে ; যেখানে উপলভ্য, ST_উপসর্গ সহ সংস্করণটি ব্যবহার করুন । আপনার ইনপুটটি ইতিমধ্যে সুপরিচিত পাঠ্য হলেই ডাব্লুকেটি-কনস্ট্রাক্টর ব্যবহার করুন। যদি তা না হয় তবে Point(x,y)উপরের কনস্ট্রাক্টরটি ব্যবহার করুন ।
    • ST_GeomFromText(wkt, srid)মাইএসকিউএল দ্বারা সমর্থিত এবং ডাব্লুকেটি দ্বারা প্রতিনিধিত্ব করতে পারে এমন কোনও স্থানিক প্রকার ফিরে আসতে পারে। আপনি যদি এটির মতো ভাবতে চান এটি এটি আলগাভাবে টাইপ করে।
    • ST_PointFromText(wkt, srid)POINTসুপরিচিত পাঠ্য থেকে একটি দৃ strongly়ভাবে টাইপড- কনস্ট্রাক্টর।

নির্মলতা

ইতিহাসের পাঠ বাদ দেওয়া, কখনই করবেন না GeomFromText(Point(x,y))। এটি ভয়াবহ, অসমর্থিত এবং অননুমোদিত।


-1

জিওমপ্রোম টেক্সট বা অন্য কোনও * ফ্রি টেক্সট ফাংশন সহ আপনি এসআরআইডি নির্দিষ্ট করতে পারেন । আমি মনে করি না আপনি এটি অন্যথায় এটি করতে পারেন।

PointFromText('POINT(lat lng)', 4326)

এটি অন্য POINT(lng lat)POINT(lat lng)
উপায়ের

মাইএসকিউএল যাইহোক এসআরআইডি ব্যবহার করে না। সুতরাং এটি বেশ অকেজো। আপনার যদি এসআরআইডি দরকার হয় তবে পোস্টগ্রেএসকিউএল / পোস্টজিআইএস এ স্থানান্তর করুন।
ইভান ক্যারল

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