কিউজিআইএস, পোস্টগিস: জ্যামিতি প্রকারটি কলামের ধরণের সাথে মেলে না


30

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

ERROR: Geometry type (Polygon) does not match column type (MultiPolygon)

আমি স্পিট বিধবাতে টেবিলের "ফিচার ক্লাস" বৈশিষ্ট্যটি মাল্টিপলিজোন থেকে পলিজোন পরিবর্তন করার চেষ্টা করেছি, কিন্তু কিছুই ঘটেনি।

পোস্টগিসকে উভয় ধরণের (বহুভুজ এবং বহুগুণ) গ্রহণ করার কোনও উপায় আছে কি? বা সম্ভবত কোনওরকমভাবে আমি বহুভুজ থেকে শেপফায়াল জ্যামিতিকে মাল্টিপলিজনে রূপান্তর করতে পারি? কোন ধারনা?

আমি উইন্ডোজে কিউগিস ২.০.১ এবং আর্কলিনাক্সে কিগিস ২.৩ চেষ্টা করেছি।

উত্তর:


14

থুতু অনিচ্ছাকৃত এবং আর সুপারিশ করা হয় না। আমি প্রসেসিং সরঞ্জামবক্স ব্যবহার এবং "পোস্টজিআইএস ইন আমদানি" অ্যালগোরিদম নির্বাচন করার পরামর্শ দেব। এই রুটিনটি ব্যবহার করে আমার আরও অনেক ভাগ্য হয়েছিল। কয়েকটি বিষয় লক্ষণীয়:

  • "" পোস্টজিআইএস স্তর যুক্ত করুন "কথোপকথন থেকে আপনার ডাটাবেস সংযোগটির নামকরণ করা হয়েছে তা অবশ্যই ডাটাবেস (সংযোগের নাম) প্যারামিটারের সাথে মিলে যাবে।
  • স্কিমাটি ইতিমধ্যে বিদ্যমান থাকতে হবে - এটি স্বয়ংক্রিয়ভাবে তৈরি হবে না

এটি পুরোপুরি কাজ করে। ধন্যবাদ। এছাড়াও আমি এই শেবাফিলটি ডিবি ম্যানেজারের সাথে লোড করেছি। প্রথমে আমি স্পিট দ্বারা মাল্টিপলিগন সহ অন্যান্য স্তরটি লোড করতাম, তারপরে আমি এটি ডিবিএমের পলিজোন স্তর দিয়ে ওভাররাইট করেছিলাম (স্তর / ফাইল) আমদানি করি। এটিও কাজ করে।
dmh126

ডাটাবেসটি প্রদর্শিত হবে না (এমনকি উইন্ডোজে কিউজিআইএস ২.১০ এর একই নাম থাকলেও)
মেনেলাওস কোটসোলারিস

19

এটি একটি পরিচিত সমস্যা হিসাবে প্রত্যাশিত যা স্থির হবে না: দেখুন http://hub.qgis.org/issues/5328

আপনার যদি কোনও কাজের প্রয়োজন হয়, আপনার টেবিলের জ্যামিতি কলামের ধরণটিকে জেনেরিক 'জ্যামিতি' তে পরিবর্তন করার চেষ্টা করুন:

ALTER TABLE my_table ALTER COLUMN geom SET DATA TYPE geometry;

আপনি নিজের আমদানি শেষ করার পরে, আপনি এখানে ফিরে যেতে পারেন MultiPolygon:

ALTER TABLE my_table ALTER COLUMN geom 
    SET DATA TYPE geometry(MultiPolygon) USING ST_Multi(geom);

বিকল্পভাবে, ogr2ogr ব্যবহার করে আপনার ডেটা লোড করার চেষ্টা করুন ।


আপনার উত্তরটি উজ্জীবিত করছেন এটা আমার চেয়ে ভাল :)
sfletche

19

আমি পোস্টজিআইএস ডাটাবেসে শেফফিলগুলি স্বয়ংক্রিয়ভাবে চালিত করতে ogr2ogr ব্যবহার করি। বিশেষত প্রশ্ন সম্পর্কিত, বিকল্পটি ব্যবহার করুন:

-nlt PROMOTE_TO_MULTI

এটি ogr2ogr ত্রুটি এড়িয়ে পলিজোন জ্যামিতিগুলিকে মাল্টিপলিজোনগুলিতে প্রচার করতে বাধ্য করবে। খুব সাধারণ উদাহরণ:

ogr2ogr -f "PostgreSQL" PG:"dbname='<my_db>'" -nlt PROMOTE_TO_MULTI <shapefile>

আমি pgsql হোস্ট / প্রমানের বিশদ বাদ দিয়েছি। একাধিক শেফফাইলে ব্যাচ করতে আপনি এমন কিছু করতে পারেন:

find ./ -name *.shp | xargs -n1 ogr2ogr <ogr2ogr args omitting the shapefile>

এটি অন্যান্য উত্তরগুলির চেয়ে কার্যকর এবং সহজ। এটি upvotes প্রাপ্য।
জো জার্মুস্কা

5

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

পরিবর্তে, আমি shp2pgsql ব্যবহার করেছি , যা নীচে বর্ণিত হিসাবে একটি সাধারণ কমান্ড প্রম্পট কাজ ছিল:

  • কমান্ড প্রম্পট ওপেন করুন ( প্রশাসক হিসাবে )
  • পোস্টগ্র্রেএসকিউএল / বিন ফোল্ডারে যান যা দেখতে এরকম কিছু দেখতে পাওয়া উচিত: C:\Program Files\PostgreSQL\9.4\bin>
  • .shpএই ডিরেক্টরিতে কেবল আপনার ফাইল অনুলিপি করুন এবং আটকান । (আমি আমার .shpফাইলগুলি দিয়ে আমার পুরো ফোল্ডারটি অনুলিপি করেছি ।
  • কমান্ড প্রম্পটে নিম্নলিখিত লিখুন: shp2pgsql -s 4326 MyShpDir/MySHPFile.shp> MYSQLFile.sqlযেখানে MyShpDirআপনার ডিরেক্টরিটি 4326 ডাব্লুজিএস 84 এর এসআরআইডি তাই আপনি যদি আলাদা এসএসআইডি ব্যবহার করেন তবে MySHPFile.shpআপনার নির্দিষ্ট ফাইলটি ( MYSQLFileস্বয়ংক্রিয়ভাবে তৈরি হয়ে যাবে) পরিবর্তন করুন change আপনি রূপান্তর করতে চান এমন সমস্ত ফাইলের জন্য অবশ্যই এটি করুন। ফাইলগুলি আপনার বর্তমান ডিরেক্টরিতে সংরক্ষিত হবে ( C:\Program Files\PostgreSQL\9.4\binআমার ক্ষেত্রে)

তারপরে আপনার পিএলএসকিউএল ডেটাবেজে এসকিউএল ফাইলগুলি অনুলিপি করে কপি করুন।

তদুপরি, অতিরিক্ত একটি দুর্দান্ত জিনিস shp2pgsqlহ'ল আপনি কমান্ডটিতে কেবলমাত্র প্যারামিটার যুক্ত করে তাত্ক্ষণিকভাবে আপনার টেবিলটিতে একটি সূচক তৈরি করতে পারেন I:

shp2pgsql -s 4326 -I MyShpDir/MySHPFile.shp> MYSQLFile.sql

লাভ! :)


3

হ্যাঁ, আপনি পোস্টজিআইএসকে আপনার সারণীতে নিম্নলিখিত সীমাবদ্ধতা যুক্ত করে যে কোনও জ্যামিতির ধরণের (বহুভুজ, বহুভুজ, পয়েন্ট, লাইনস্ট্রিং ইত্যাদি) গ্রহণ করতে বলতে পারেন।

PostGIS 2.x এর জন্য (জেনেরিক জ্যামিতি টাইপমড ব্যবহার করে)

ALTER TABLE my_table ALTER COLUMN geom TYPE geometry(Geometry,4326);

পূর্ববর্তী উত্তর (PostGIS 1.x সীমাবদ্ধতা ব্যবহার করে)

CONSTRAINT enforce_geometry_type CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geometrytype(geom) = 'POLYGON'::text OR geom IS NULL)

নিয়ন্ত্রণ বা কাছাকাছি সিন্ট্যাক্স ত্রুটি। আমি সেট সংস্থাগুলি চেষ্টা করেছি কিন্তু পরিবর্তে আমি চেকের কাছে একই ত্রুটি পেয়েছি।
dmh126

আপনি পোস্টগ্রিসের কোন সংস্করণ ব্যবহার করছেন?
sfletche

পোস্টগ্রিসএসকিউএল 9.3
ডিএমএইচ 126

enforce_geotype_geomপরিবর্তে ব্যবহার করার চেষ্টা করুন enforce_geometry_type। যদি এটি কাজ করে তবে আমাকে জানান, এবং আমি আমার প্রতিক্রিয়াটি সম্পাদনা করব যদি তা হয়।
sfletche

এটি কাজ করে না। একই ত্রুটি।
dmh126

2

আমি 'ইম্পোর্ট ইন পোস্টজিআইএস' অ্যালগরিদম সমাধান চেষ্টা করেছিলাম কিন্তু দেখতে পেলাম যে এটিও কার্যকর হয়নি। আমি খুঁজে পাওয়া সবচেয়ে সহজ সমাধানটি হ'ল ডেটাবেস > ডিবি ম্যানেজারে যাওয়া , আপনার ডাটাবেসে নেভিগেট করা এবং আমদানি স্তর / ফাইল (নীচের তীর) বোতামটি ক্লিক করা।

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