Ogr2ogr এর সাথে পোস্টগিসে একটি শেফফিল আমদানি করুন: ডেটাসোর্স খুলতে অক্ষম


12

পোস্টগ্রিস ডাটাবেসে একটি শেফফিল আমদানি করতে আমি ogr2ogr ব্যবহার করতে চাই। আমি ogr2ogr সাফল্যের সাথে ইনস্টল করেছি এবং আমি pgsql থেকে নিম্নলিখিত কমান্ডটি চালিয়েছি:

ogr2ogr -f "PostgreSQL" PG:"host=localhost user=user_1 password=***** dbname=imports" world_boundaries.shp

আমি যা ফিরে পাই তা একটি ত্রুটি বার্তা:

Unable to open datasource `world_boundaries.shp' with the following drivers: --a list of drivers follows (ESRI Shape File etc.)

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

এছাড়াও আমি চালানোর চেষ্টা করেছি:

ogrinfo world_boundaries.shp

একই জিনিস.


ফাইলটির অনুমতি নিয়ে সমস্যাগুলি সমাধানের পরে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

  ERROR 1: AddGeometryColumn failed for layer world_boundaries, layer creation has failed.
  ERROR 1: Terminating translation prematurely after failed
  translation of layer world_boundaries (use -skipfailures to skip errors)

আমি এটি জিইউআই shp2pgsql এর মাধ্যমে আমদানি করার চেষ্টা করেছি এবং আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

ALTER TABLE "public".""
Failed in pgui_exec(): ERROR:  permission denied for relation spatial_ref_sys
 CONTEXT:  SQL statement "SELECT SRID         FROM spatial_ref_sys WHERE SRID = new_srid"
PL/pgSQL function addgeometrycolumn(character varying,character   varying,character varying,character varying,integer,character varying,integer,boolean) line 50 at SQL statement
 SQL statement "SELECT AddGeometryColumn('',$1,$2,$3,$4,$5,$6,$7)"
 PL/pgSQL function addgeometrycolumn(character varying,character  varying,character varying,integer,character varying,integer,boolean) line 5 at     SQL statement

Shapefile import failed.

এবার সমস্যাটি হ'ল এই ডাটাবেস ব্যবহারকারীর পর্যাপ্ত অনুমতি নেই। এটি এটি স্থির করে:

GRANT ALL ON TABLE spatial_ref_sys TO my_user_name;

পরবর্তী ত্রুটি বার্তাটি হ'ল:

  Warning 1: Geometry to be inserted is of type 3D Multi Polygon, whereas the layer geometry type is 3D Polygon.
 Insertion is likely to fail
 ERROR 1: INSERT command for new feature failed.
 ERROR:  Geometry type (MultiPolygon) does not match column type (Polygon)

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

ERROR 1: PostgreSQL driver doesn't currently support database creation.
Please create database with the `createdb' command.
PostgreSQL driver failed to create PG:host=localhost user=my_user_name dbname=my_database password=password -nlt POLYGON

তবে এটি shp2pgsql GUI ব্যবহার করে লোড হয়।


@ ইরোবিসের মন্তব্য এটিকে অবশেষে কাজ করতে সক্ষম করেছে। তথ্য সঠিকভাবে ডিবি লোড!

ogr2ogr -f "PostgreSQL" PG:"host=localhost user=geonode dbname=geonode_imports password=geonode" -nlt GEOMETRY wld_bnd_adm0_gaul_2015.shp

আপনার শেফফাইলটি বৈধ নয় বলে মনে হচ্ছে। এটি অন্যান্য সফ্টওয়্যারটিতে কাজ করে?
এভিল জিনিয়াস

1
হ্যাঁ. এটি QGIS এ সঠিকভাবে লোড হয়েছে।
ব্যবহারকারী 1919

1
এছাড়াও, ধরে নিবেন যে আপনার ডিবি ইতিমধ্যে রয়েছে এবং এটি আপনার ওগ্রো 2 জিআর নির্দেশিকায় সঠিকভাবে বানান করেছে এবং কমান্ডের পোস্টগ্রিজ ব্যবহারকারীর প্রয়োজনীয় সুবিধাগুলির সম্পূর্ণ পরিপূরক রয়েছে (নির্বাচন, INSERT, আপডেট, ক্রিয়েট .. ইত্যাদি), -nln layernameযুক্তি যুক্ত করার চেষ্টা করুন , সম্ভবত -overwriteএটি জীবনে আসে কিনা তাও দেখার জন্য। এছাড়াও, আমি যদি আপনি হয়ে থাকি তবে sudoঅনুমতি ও সুযোগগুলি বাতিল করার জন্য সুপার পোস্টে সুপার পোস্টার হিসাবে আমি আমার পোস্টগ্রিজ সুপারভাইজারের পাশাপাশি ওগরি 2ogr চালাতাম । একবার আপনি স্ক্রিপ্ট শক্ত হয়ে গেলে, আপনি বিরক্তিকর অনুমতি এবং সুবিধাগুলি ছাড়িয়ে যেতে পারেন। :)
elrobis

3
ধন্যবাদ। -Llt POLYGON এর পরিবর্তে -nlt জিওমেট্রি যুক্ত করা কৌশলটি করেছে।
ব্যবহারকারী 1919

1
খুশী এটা কাজ করে। আমি এগিয়ে যাব এবং একটি উত্তরে একটি যথাযথ প্রতিক্রিয়া জানাব যা এটি কেন কাজ করে বলে মনে করে তাও বর্ণনা করে।
elrobis

উত্তর:


17

আপনি যেমন পরীক্ষা এবং ত্রুটি দ্বারা আবিষ্কার করেছেন, আপনাকে ঠিক করার জন্য কয়েকটি নগন্য সমস্যা ছিল যার মধ্যে সর্বশেষটি ওগ্রো 2 জিআর এর -nlt GEOMETRY* যুক্তি ব্যবহার করে সমাধান করা হয়েছিল ।

* @ লিহাচাদুরিয়ানদের মন্তব্যে সেই প্রস্তাবটি নোট করুন যা পূর্বসূচী উপকারের পাশাপাশি সর্বোত্তম অনুশীলনকে উত্সাহ দেয় -nlt PROMOTE_TO_MULTI, এর পরিবর্তে একটি ডিফল্ট সমাধান হিসাবে ব্যবহার করা উচিত nlt GEOMETRY

ব্যবহারকারীর অনুমতি এবং ত্রুটি বার্তা

প্রথমত, ogr2ogr আপনার শেফফাইলটি খুলতে পারেনি, এবং আপনি বুঝতে পেরেছেন যে অনুমতি সম্পর্কিত সমস্যাগুলি আসলে ওএস ব্যবহারকারীকে আপনার শেফফাইলে অ্যাক্সেস করতে প্রভাবিত করে। তবে অন্যদের জন্য এখানে একটি গুরুত্বপূর্ণ পাঠ রয়েছে, বিশেষত, ogr2ogr এর ত্রুটির বার্তাটি এই বিষয়টিকে বিভ্রান্তিকর ছিল! প্রকৃতপক্ষে, প্রথম মন্তব্যকারীদের একজন আপনার শেফফাইলটি অবৈধ বলে মনে করেছিলেন এবং স্বীকার করেছেন যে, আমার প্রথম অনুমানটি ছিল যে পথ / ফাইলের নামটিতে সম্ভবত একটি ত্রুটি / টাইপ ছিল, বা ফাইলের পথে কোনও অপ্রচলিত চরিত্র থাকতে পারে — যেমন স্পেস — যা শেগফাইলটির দিকে ইঙ্গিত করার জন্য ওগ্রোগ্রোগের দক্ষতা ভঙ্গ করে। আপনি আবিষ্কার করেছেন যে এটি আসলে ব্যবহারকারীর অনুমতি নিয়ে সমস্যা ছিল। যেহেতু ত্রুটি বার্তাটি একটি লাল শিবির তৈরি করে, এটি অন্যদের মনের পেছনে রাখার একটি সম্ভাবনা। :)

এসকিউএল ব্যবহারকারী অধিকার এবং রহস্য ব্যর্থতা

আমি কিছুক্ষণের জন্য আপনার দ্বিতীয় ত্রুটি দ্বারা স্তম্ভিত হয়ে যেতে পারতাম, তবে আপনার এসকিউএল ব্যবহারকারীকে একটি ভিন্ন আমদানি ইউটিলিটি (shp2pgsql) দিয়ে পরীক্ষা করে যা স্মার্ট ছিল, আপনি একটি আরও সুনির্দিষ্ট ত্রুটি বার্তা পেয়েছেন এবং আপনার এসকিউএল ব্যবহারকারীকে spatial_ref_sysটেবিলে প্রয়োজনীয় সুযোগ-সুবিধা দিয়েছেন । সুতরাং যে কেউ সঠিকভাবে কাজ করতে তাদের ogr2ogr আমদানির নির্দেশ পেতে অসুবিধাগুলি রয়েছেন তা নিশ্চিত হওয়া উচিত যে তাদের এসকিউএল ব্যবহারকারীর ডাটাবেস এবং 'স্থানিক_আরফ_সিস' টেবিলে উভয় পর্যায়ে যথেষ্ট সুবিধা রয়েছে।

মিশ্রিত জ্যামিতির ধরণ এবং সেরা অনুশীলন

আপনি যে সর্বশেষ প্রতিবন্ধকতার মুখোমুখি হয়েছিলেন তার সাথে সম্পর্কিতটি মনে হয় যে শেফফায়ালগুলি একক এবং বহুগুণ জ্যামিতি উভয়ের জন্য একই ডেটাসেট / ফাইলে সহাবস্থান করতে দেয়। একই বৈশিষ্ট্য ধরণের একক / বহুগুণের জন্য এমনকি একই টেবিলে জ্যামিতির প্রকারগুলি মিশ্রিত করা খারাপ অভ্যাস হিসাবে বিবেচিত হয় এবং ডিফল্টরূপে, আপনার সরঞ্জামচঞ্চের ওপেন সোর্স প্লেয়াররা জ্যামিতির ধরণের মিশ্রণ থেকে আপনাকে রক্ষা করার চেষ্টা করবে। ভাগ্যক্রমে, যদিও তারা আপনাকে কিছু বিকল্প দেয়। প্রাথমিকভাবে আমি আপনার ogr2ogr নির্দেশের উপর -nlt GEOMETRY* যুক্তিটি সেট করার প্রস্তাব দিয়েছিলাম, যা আপনাকে ESRI এর আলগা কনভেনশন সত্ত্বেও আপনার বহুভুজ ডেটাসেট আমদানির অনুমতি দিয়েছে। যদিও আপনাকে পরামর্শ দিন, এর অর্থ সম্ভবত আপনার টেবিলে আপনার একক অংশ এবং বহু অংশের জ্যামিতি দুটি রয়েছে এবং এটি আপনার পরবর্তী ক্ষেত্রে অন্যান্য মাথাব্যথা তৈরি করতে পারে!

এটি উল্লেখযোগ্য যে ogr2ogr এর আরও একটি -nltবিকল্প রয়েছে যা আপনার বিবেচনা করা উচিত, যথা PROMOTE_TO_MULTIডকুমেন্টেশন উদ্ধৃতি ..

জিডিএল ১.১০ দিয়ে শুরু করে, প্রোমোটফলি_মুলটিআই স্বয়ংক্রিয়ভাবে বহুভুজগুলিতে বহুভুজ বা বহুগুণকে মিশ্রিত করে এমন স্তরগুলি এবং লাইনস্ট্রিংস বা মাল্টিলিনেস্ট্রিংগুলিকে মাল্টিলিনেস্ট্রিংগুলিতে মিশ্রিত করে এমন স্তরগুলি স্বয়ংক্রিয়ভাবে প্রচার করতে ব্যবহার করা যেতে পারে। জ্যামিতির ধরণের জন্য কঠোর চেক প্রয়োগকারী পোস্টজিআইএস এবং অন্যান্য টার্গেট ড্রাইভারগুলিতে শেফফিলগুলি রূপান্তর করার সময় দরকারী হতে পারে।

অন্য কথায়, আপনি যদি PROMOTE_TO_MULTIপতাকাটি ব্যবহার করেন , তবে আপনার সমস্ত বৈশিষ্ট্যগুলি একক অংশ নিয়ে গঠিত হলেও, মাল্টিপার্ট বৈশিষ্ট্যে রূপান্তরিত হবে। মন্তব্যগুলিতে @ লিহাচাদুরিয়ান দ্বারা উল্লিখিত হিসাবে - এবং আমি নিশ্চিত যে বেশিরভাগই সম্মত হবেন - আপনাকে আপনার টেবিলে ফিচারের জ্যামিতিগুলি একীভূত করে PROMOTE_TO_MULTIলুজার GEOMETRYপতাকার চেয়ে বেশি পছন্দ করার পরামর্শ দেওয়া হচ্ছে । মূলত, আপনার লিখিত যে কোনও কোডের কেবলমাত্র মাল্টিপার্ট জ্যামিতি আশা করা উচিত। স্বীকার করা যায়, এটি পরিচ্ছন্ন হতে পারে এবং কিছু বিকাশ সহজতর করতে পারে।

পোষ্ট আমদানির জন্য কোনও এসএইচপি নিয়ে সমস্যায় পড়ার জন্য জেনেরিক পরামর্শ

  1. আপনার পাথগুলিতে কোনও মজাদার অক্ষর না রয়েছে এবং পাথ বা ফাইলের নামতে কোনও টাইপস বা ভুল বানান নেই তা নিশ্চিত করুন
  2. @ ব্যবহারকারী1919 হিসাবে আবিষ্কার করা হয়েছে, আপনার ওএস ব্যবহারকারীর শেফফাইলে অ্যাক্সেস করার যথেষ্ট সুযোগ রয়েছে কিনা তা নিশ্চিত করুন! তারা যেমন দেখিয়েছিল, কিউজিআইএস-এর মতো অন্য সফ্টওয়্যারটিতে শেফফাইলটি খোলার চেষ্টা করতে সহায়তা করতে পারে - যদি এটি একটি সফ্টওয়্যারটিতে কাজ করে তবে এটি দুর্নীতিগ্রস্থ নয়, এবং এটি অন্য সফ্টওয়্যারটিতে কাজ করা উচিত।

প্রথমে, আপনার ogr2ogr কমান্ড কার্যকর করার বিষয়টি বিবেচনা করুন sudoযতক্ষণ না আপনার স্ক্রিপ্টটি ইচ্ছাকৃতভাবে কাজ করছে তা নিশ্চিত হওয়ার পরে আপনি জানতে চান যতক্ষণ না আপনার স্ক্রিপ্টটি উদ্দেশ্য হিসাবে কাজ করছে until

  1. @ ব্যবহারকারী 1919 হিসাবে উপলব্ধি হিসাবে, নিশ্চিত করুন যে আপনার এসকিউএল ব্যবহারকারীর আপনার স্ক্রিপ্ট দ্বারা লক্ষ্যযুক্ত উভয় ডেটাবেস, পাশাপাশি spatial_ref_sysটেবিলের পর্যাপ্ত সুযোগ রয়েছে।

আবার, প্রথমে, আপনার স্ক্রিপ্টটি কাজ না করা অবধি এসকিউএল সুবিধার্থ সংক্রান্ত বিষয়গুলি রুল আউট করার জন্য এখানে পোস্টগ্রিএসএসএলএল সুপার ব্যবহারকারীকে বিবেচনা করুন। যদি আপনার স্ক্রিপ্টটি সুপারসারের সাথে কাজ করে তবে পছন্দের অটোমেশন ব্যবহারকারীর সাথে ব্যর্থ হয়, আপনি জানেন যে সমস্যাটি এসকিউএল ব্যবহারকারীর সাথে সম্পর্কিত এবং না আপনার ডেটা বা আপনার পরিবেশের (gdal / ogr ইনস্টলেশন ইত্যাদি) সম্পর্কিত is

  1. সেট করার চেষ্টা -nltকরতে পারেন পতাকা PROMOTE_TO_MULTIবা GEOMETRY। যেহেতু শেফফাইলগুলি একটি আলগা বৈশিষ্ট্য প্রকারের কনভেনশনের অনুমতি দেয়, কখনও কখনও আপনাকে আপনার ওপেন সোর্স ইউটিলিটিগুলিকে আরও উপযুক্ত করে তুলতে নির্দেশ দিতে হয় :)

  2. আপনি যদি PostGRESQL বা মাইএসকিউএল এ আমদানি করে থাকেন, সেট করার চেষ্টা করুন -lco PRECISION=no..ফায়ার সতর্কতা, এই যুক্তিটি কী করে তা আমি ঠিক বুঝতে পারছি না, তবে আমি যা অভিজ্ঞতা পেয়েছি তা এখানে রয়েছে .. আপনি জানেন যে শেফফাইলে প্রায়শই ক্ষেত্র SHAPE_LENGTHএবং SHAPE_AREAক্ষেত্রগুলি অন্তর্ভুক্ত থাকে এবং আমি আমি কখনও কখনও রহস্য ব্যর্থতার সম্মুখীন হয়েছি তখন খেয়াল করেছি, যদি আমি সেই ক্ষেত্রগুলি মুছতে পারি তবে আমি সঠিকভাবে আমদানির জন্য ডেটা পেতে পারি। তবে, আমি যদি ব্যবহার করি তবে আমি -lco PRECISION=noসেই ক্ষেত্রগুলি মোছা না করেই আমদানি করতে ডেটা পেতে পারি। আমার প্রস্তাবটি হ'ল এই প্যারামিটারটিকে সমস্যা সমাধানের পদক্ষেপ হিসাবে ব্যবহার করা, তবে আপনি কোনও উত্পাদনের সমাধানে আমদানি গ্রহণ করার আগে এটি কোন সমস্যাটি সত্যই সমাধান হচ্ছে তা বোঝার জন্য।

  3. অবশেষে, আপনি মাইএসকিউএল ব্যবহার করছেন, মনে রাখবেন কিছু খুব বড় বৈশিষ্ট্য জ্যামিতি মাইএসকিউএল এর max_allowed_packetপরামিতি আপত্তিজনক হতে পারে । আপনি মাইএসকিউএল ড্রাইভারের জন্য ডকুমেন্টেশনে এ সম্পর্কে আরও পড়তে পারেন .. তবে সমাধানটি হ'ল ডিফল্ট মানের চেয়ে বড় মাপের জন্য আপনার মাইএসকিউএল কনফিগারেশন পরিবর্তন করা।

Ogr2ogr এর জন্য PostGIS আমদানি কমান্ডের SHP উদাহরণ

এখানে যে কোনও নবজাতকের জন্য ঘুরে বেড়াতে পারে তার জন্য, আমার এসএইচপি থেকে পোস্ট আমদানি বেশিরভাগই ogr2ogr ব্যবহার করার মতো দেখায়। লক্ষ্য করুন যে আমি ফাইলের পাথ / নামগুলি উদ্ধৃতিতে গুটিয়ে রেখেছি, এটি স্পেস, অদ্ভুত অক্ষর এবং টার্মিনাল জুড়ে লাইন ভাঙ্গার বিরুদ্ধে সুরক্ষা দেয় .. এছাড়াও আমি জ্যামিতির নাম ক্ষেত্রের ওভাররাইড ছাড়াও উপরের আলোচিত বেশিরভাগ যুক্তি যুক্ত করেছি এফআইডি ক্ষেত্র এবং স্তরটির নাম:

ogr2ogr -f "PostgreSQL" "PG:host=127.0.0.1 user=myuser dbname=mydb password=mypassw0rd" "C:/path/to/some_shapefile.shp" -lco GEOMETRY_NAME=the_geom -lco FID=gid -lco PRECISION=no -nlt PROMOTE_TO_MULTI -nln new_layername -overwrite


3
সম্পর্কিত -nlt PROMOTE_TO_MULTI, এটি বহুভুত জ্যামিতির জন্য সত্যই সেরা অনুশীলন। আমি দৃ answer় ডিফল্ট পছন্দ হিসাবে এটি পরামর্শ দেওয়ার জন্য আপনার উত্তর পরিবর্তন করার পরামর্শ দিচ্ছি, কেবল সাবধানতার সাথে বিবেচনা করার পরে লঙ্ঘন করা to আমি geometryমিশ্রিত বহুভুজ / মাল্টিপলিগন হ্যান্ডেল করতে জেনেরিক প্রকারটি ব্যবহারের বিরুদ্ধে দৃ strongly়ভাবে পরামর্শ দেব , যদি না ব্যবহারকারী / বিকাশকারী সত্যই জানেন যে তারা কী করছে এবং বহুভুজ, লাইন এবং পয়েন্টের ধরণের মিশ্রিত করতে না পারে।
লি হাচাদুরিয়ান

1
@ লিহাচাদুরিয়ান, একমত হয়েছেন আমি প্রস্তাবিত উত্তরটি সম্পাদনা করেছি। আমার প্রতিরক্ষার ক্ষেত্রে, PROMOTE_TO_MULTIনতুন-যথেষ্ট (জিডিএল 1.10) যা আমি এখনও এই সমস্ত শুরু করার সময় পাওয়া যায় এমন মূল সমাধানটিতে ডিফল্ট ছিল। :) .. সমস্ত ন্যায্যতার মধ্যে, যদিও, একটি শেফফাইল কেবল একক এবং বহুগুণিত প্রকারগুলিকে একত্রিত করবে, সুতরাং এমন পরিস্থিতি কখনই আসবে না যেখানে ogr2ogr একটি shp চাপিয়ে দেয় -nlt GEOMETRYএবং পয়েন্ট, লাইন এবং পোলিস সহ একটি টেবিল তৈরি করবে :))))) তবে আমি এই বিষয়ে আপনার অবস্থানের সাথে পুরোপুরি একমত।
elrobis

1
শেফাইলগুলি তাদের বহুভুজ প্রকারে একাধিক বহুভুজকে অনুমতি দেয়। তাদের কাছে মাল্টিপলিজোন টাইপও নেই। এমনকি কেবল যখন এই ধরণের আকারের ফাইলের মুখোমুখি হয় তখনও -nlt PROMOTE_TO_MULTIএই কাজটি করার জন্য একজনকে ব্যবহার করা দরকার ।
সিএমসিডিগ্রাগনকাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.