Gdal / ogr ব্যবহার করে শেফফিল করতে কোনও CSV ফাইলে যোগদান করবেন?


11

আমি উদাহরণস্বরূপ বিভিন্ন বৈশিষ্ট্যাবলী সঙ্গে একটি shapefile আছে, YEAR, COUNTY, এবং AREA। আমার কাছে সিএসভি ফাইল রয়েছে যা আমি ফিল্ডফাইলে চাই এমন আরও ক্ষেত্র সহ, যেমন POPULATION। শেফফাইল এবং সিএসভি ফাইল উভয়েরই একটি ক্ষেত্র রয়েছে GISJOIN। আমি জানি কিউজিআইএস-এ কীভাবে যোগদান করতে হয়। তবে আমি কীভাবে স্থায়ীভাবে যোগদান ogr2ogrকরতে এবং জিডিএল / ওজিআর এর অন্য কোনও একটি সরঞ্জাম ব্যবহার করে কোনও শেফফিলকে লিখতে পারি?


আপনার জিডিএল / ওজিআর বিল্ডের কি স্থানিক বা স্ক্লাইট সমর্থন রয়েছে?
ব্র্যাডহার্ডস

@ ব্র্যাডহার্ডস: এটি দেখে মনে হচ্ছে না। এটি উবুন্টু 14.04 থেকে প্যাকেজড জিডিএল / ওজিআর বিল্ড।
লিংকন মুলেন

উত্তর:


23

Ogr2ogr উপযোগ একটি সমর্থন সীমিত SQL সিনট্যাক্স । আপনি নীচের মতো কিছু ব্যবহার করে আপনার সিএসভিতে শেফফায়লে যোগদান করতে পারেন:

ogr2ogr -sql "select inshape.*, joincsv.* from inshape left join 'joincsv.csv'.joincsv on inshape.GISJOIN = joincsv.GISJOIN" shape_join.shp inshape.shp

8
ওহ জিডাল / ওগার - আপনি আমাকে বিস্মিত করতে কখনও থামেন না
রাদেক

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

@ আমার কাছে আছে, তবে আমি অবশ্যই এটি সঠিকভাবে করিনি, ogr2ogr -sql "সি: \ পথ \ ইনশ্যাপ করুন * সি তে .csv'.joincsv: \ পথ \ inshape.GISJOIN = joincsv.GISJOIN "shape_join.shp inshape.shp

4
ogr2ogr -sql "।। নির্বাচন inshape *, inshape থেকে joincsv * বাম যোগদানের 'পাথ / থেকে / joincsv.csv'.joincsv inshape.GISJOIN = joincsv.GISJOIN এ" shape_join.shp পাথ / থেকে / inshape.shp
user2856

আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: "সতর্কতা 1: 1060008100 ক্ষেত্রের মান ইনশাপ করুন MA 86 বৈশিষ্ট্যের এমএমএ সফলভাবে লিখিত হয়নি field সম্ভবত ক্ষেত্রের প্রস্থের সাথে খুব বেশি সংখ্যার কারণে" কীভাবে এই সমাধান করবেন কোনও ধারণা?
RutgerH

7

গৃহীত উত্তরটি সত্যিই দরকারী, তবে আমি দেখতে পেলাম যে এটি একটি বড়-ইশ ডাটাবেসের সাথে ধীর ছিল। আমি বিশ্বাস করি ডেটাতে যোগদানের সময় এটি আপনার বিকল্পগুলিও সীমাবদ্ধ করে।

আমার পদ্ধতিটি এখন এসকিউএলাইটে ( csvkit এবং ogr2ogr এর মিশ্রণ ব্যবহার করে ) সমস্ত কিছু টানতে:

csvsql --db sqlite:///myjoindb.db --insert myjoincsv.csv
ogr2ogr -append -f "SQLite" myjoindb.db myjoinshp.shp

তারপরে সমস্ত কিছুতে যোগদান করুন এবং এর থেকে একটি শ্যাফিল ফাইল তৈরি করুন:

ogr2ogr -f "ESRI Shapefile" -sql "SELECT csv.*, shp.* FROM myjoinshp shp INNER JOIN myjoincsv csv ON csv.joinfield = shp.joinfield" joined_output.shp myjoindb.db

হেই এরিক, আমি একটি ত্রুটি পেয়ে যাচ্ছি যে মাইজোইন্ডবি.ডিবি ইতিমধ্যে বিদ্যমান। সেই দ্বিতীয় লাইনের ডিবিটিকেও প্রথমটির মতো নামকরণ করার কথা রয়েছে?
জিআইএস ড্যানি

আহ ভালো কথা, দ্বিতীয় লাইনে আপনি বিদ্যমান এসকিউএলাইট ডিবি খোলার অনুমতি দেওয়ার জন্য -appendসেখানে একটি যুক্ত করতে চান ogr2ogrএবং এতে যুক্ত করতে চান। আমি এটি দেখানোর জন্য উত্তর সম্পাদনা করেছি।
এরিক বেলসফোর্ড

ধন্যবাদ! দুর্দান্ত কাজ করছে। আরও একটি প্রশ্ন, আশা করি দ্রুত। প্রথম লাইনে, আমার কাছে একটি ফিল্ড জিওড রয়েছে যা অদ্ভুতভাবে নেতিবাচক ফ্লোটে রূপান্তরিত হতে থাকে। এটি একটি শুমারি আইডি যা আমি স্ট্রিং হিসাবে বিবেচনা করতে চাই, আমি উক্তি দিয়ে স্ট্রিং মোড়ানোর চেষ্টা করেছি এবং এটি কার্যকর হয়নি। একটি আদেশ আছে যেমন: csvsql --db sqlite:///myjoindb.db --insert myjoincsv.csv geoid.map(str)বা কিছু?
জিআইএস ড্যানি

কি অদ্ভুত হয় যোগদানের সঠিকভাবে ঘটে geoid কিন্তু আউটপুট হয়েছে geoid পরিবর্তে কি এটা ঢুকে এর -2147184982 সঙ্গে।
জিআইএস ড্যানি

এর মতো শব্দগুলি geoidকোনও সংখ্যায় রূপান্তরিত হচ্ছে তবে সংখ্যাটি এত বড় যে এটি উপচে পড়ে এবং নেতিবাচক হয়ে ওঠে। সিএসভিএসকিএল এর জন্য ডকুমেন্টেশন চেক করুন , আপনি সম্ভবত একটি টেবিল নির্দিষ্ট করার চেষ্টা করতে পারেন যেখানে আপনি স্পষ্টতই বলছেন যে geoidএটি একটি স্ট্রিং, অন্যথায় --no-inferenceসাহায্য করতে পারে।
এরিক বেলসফোর্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.