ঠিক আছে বেন, আমার অনুমান এখানে:
1) আপনি ইতিমধ্যে আপনার ডেটা পেয়ে গেছেন (আমার কাছে একটি শেফফাইলে কিছু ঠিকানা পয়েন্ট ছিল এবং আমি মিসৌরির জন্য আদম শুমারি ট্র্যাক্ট এবং সেন্সাস ব্লক শেফ ফাইলগুলি ডাউনলোড করেছি)।
2) আপনি ইতিমধ্যে আপনার ঠিকানা পয়েন্টগুলি জিওকোড করেছেন এবং আপনি ডেটা প্রজেক্ট করতে স্বাচ্ছন্দ্য বোধ করছেন।
3) আপনি একটি ওজিআর / পোস্টজিআইএস সমাধান (উভয়ই বিনামূল্যে) দিয়ে আরামদায়ক ।
আপনার কাছে এই সফ্টওয়্যারটি না থাকলে এখানে কিছু ইনস্টল নোট রয়েছে: পোস্টজিআইএস সমর্থন সহ পোস্টগ্রিইএস কীভাবে ইনস্টল করবেন । (দ্বারা BostonGIS। দয়া করে না অপরাধ তাদের শিরোনামের সাথে গ্রহণ না করেন, আমি শুধু মনে হয় এটা সেরা কীভাবে আছে। আউট) এ ছাড়া, এখানে এক , দুই , এবং তিনটি সাইট পাইথন বাইন্ডিং সঙ্গে GDAL / OGR ইনস্টল করতে কিভাবে বর্ণনা।
ক্যাভেট : প্রকৃত বিশ্লেষণ করার আগে (যেমনST_Contains
নীচে স্টাফগুলি ) আপনার সমস্ত স্তর একই প্রক্ষেপণে রয়েছে তা নিশ্চিত করা উচিত! আপনার যদি শেফফিল থাকে, তবে কোয়ান্টাম জিআইএস (কিউজিআইএস) বা ওজিআর (অথবা আপনার কাছে আর্কজিআইএস ) ব্যবহার করে একটি প্রজেকশন থেকে অন্য প্রোজেকশন থেকে অনুবাদ করা সহজ। বিকল্পভাবে, আপনি PostGIS ফাংশন ব্যবহার করে ডেটাবেজে প্রক্ষেপণ রূপান্তর সম্পাদন করতে পারেন। মূলত আপনার বিষটি বাছাই করুন, বা যদি এটি কোনও হোঁচট খায় তবে আমাদের জানান।
প্রদত্ত প্রদত্তগুলির সাথে, এইভাবে আমি পোস্টজিআইএস ব্যবহার করে কিছু ঠিকানা পয়েন্টের ডেটাতে ট্র্যাক্ট যুক্ত করেছি এবং অ্যাট্রিটগুলি ব্লক করেছি:
প্রথমে আমি ogr2ogr
তিনটি শেফফিল পোস্টজিআইএসে আমদানি করতাম :
Ogr2ogr ব্যবহার করে ঠিকানাগুলি আমদানি করুন:
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\addresses.shp" -nln mcdon_addresses -nlt geometry
আমদানি আদমশুমারি ট্র্যাক্ট (মিসৌরি) ogr2ogr ব্যবহার করছে:spMoWest
প্রত্যয় বোঝা আমি ইতিমধ্যে মিসৌরি রাজ্য প্লেন পশ্চিম ফুট আমার ডেটা অনুবাদ করেছেন।
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_tract10_spMoWest.shp" -nln mo_tracts_2010 -nlt geometry
আমদানি ব্লক ডেটা (মিসৌরি): এটি কিছুটা সময় নিয়েছে। আসলে, আমার কম্পিউটারটি ক্র্যাশ করে চলেছে এবং আমাকে এটিতে একটি ফ্যান লাগাতে হয়েছিল! ওহ এছাড়াও, ogr2ogr
কোন মতামত দিতে হবে না হবে, তাই জোরালো পাবেন না; এটি অপেক্ষা করা নিশ্চিত করুন এবং এটি শেষ পর্যন্ত শেষ হবে।
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "E:\path_to\st_block10_spMoWest.shp" -nln mo_blocks_2010 -nlt geometry
একবার ডেটা আমদানি সম্পন্ন হওয়ার পরে, PgAdmin III (PostGREs GUI) চালু করুন, আপনার ডাটাবেসে ব্রাউজ করুন এবং কিছু দ্রুত রক্ষণাবেক্ষণ কমান্ড নিক্ষেপ করুন যাতে পোস্টগ্রিএসএইচসিএল এই নতুন ডেটা ব্যবহার করে দ্রুত চালিত হবে:
vacuum mcdon_addresses;
vacuum mo_tracts_2010;
vacuum mo_blocks_2010;
এর পরে, আমি কৌতূহল ছিলাম যে কতগুলি কাঁচা ঠিকানা পয়েন্ট আমদানি করেছি, তাই আমি দ্রুত করলাম COUNT(*)
। আমি পরে "স্যানিটি চেকস" এর জন্য একটি পা রাখার জন্য এই জাতীয় কোনও কাজ শুরু করার পরে সাধারণত একটি গণনা করি ..
SELECT COUNT(*) FROM mcdon_addresses;
-- 11979
পরবর্তী ধাপে, আমি দুটি নতুন টেবিল তৈরি করেছি, ধীরে ধীরে ট্র্যাক্টের বৈশিষ্ট্যগুলি এবং তারপরে ব্লকগুলির বৈশিষ্ট্যগুলিকে আমার মূল ঠিকানা পয়েন্ট টেবিলটিতে যুক্ত করব। আপনি দেখতে পাবেন, পোস্টজিআইএস ST_Contains
ফাংশনটি ভারী-উত্তোলন করেছিল, প্রতিটি ক্ষেত্রেই পয়েন্টগুলির একটি নতুন টেবিল তৈরি করে, প্রতিটি তার ভিতরে থাকা ট্র্যাক্টস এবং ব্লক বহুভুজগুলির বৈশিষ্ট্য অর্জন করে।
বিঃদ্রঃ! বংশবৃদ্ধির জন্য, আমি প্রতিটি টেবিল থেকে কেবল কয়েক মুঠ ক্ষেত্র নিচ্ছি। আপনি সম্ভবত প্রায় সব চাইবেন । আমি প্রায় বলছি কারণ আপনি যে ogr_fid
টেবিলগুলি সংযুক্ত করছেন সেগুলি থেকে আপনাকে ক্ষেত্রটি (সম্ভবত এমনকী অন্যদের?) বাদ দিতে হবে, অন্যথায় পোস্টগ্রিইগুলি একই নামে দুটি ক্ষেত্র সম্পর্কে অভিযোগ করবে ..
(পিএস আমি এগুলি বের করার সময় এখানে কিছু স্নোপিং করেছি: http://postgis.net/docs/manual-1.4/ch04.html )
ট্র্যাক্টস অ্যাট্রিবিউটস সহ অ্যাড্রেস পয়েন্টগুলির একটি নতুন টেবিল তৈরি করুন: দ্রষ্টব্য আমি প্রতিটি আউটপুট কলামটি ইঙ্গিত দিয়ে উপস্থাপন করছি যে কোন টেবিলটি এটি শুরু হয়েছিল (আমি নীচে কেন তা ব্যাখ্যা করব) disc
CREATE TABLE mcdon_addresses_wtract AS
SELECT
a.wkb_geometry,
a.route AS addr_route,
a.box AS addr_box,
a.new_add AS addr_new_add,
a.prefix AS addr_prefix,
a.rdname AS addr_rdname,
a.road_name AS addr_road_name,
a.city AS addr_city,
a.state AS addr_state,
a.zip AS addr_zip,
t.statefp10 AS tr_statefp10,
t.countyfp10 AS tr_countyfp10,
t.tractce10 AS tr_tractce10,
t.name10 AS tr_name10,
t.pop90 AS tr_pop90,
t.white90 AS tr_white90,
t.black90 AS tr_black90,
t.asian90 AS tr_asian90,
t.amind90 AS tr_amind90,
t.other90 AS tr_other90,
t.hisp90 AS tr_hisp90
FROM
mcdon_addresses AS a,
mo_tracts_2010 AS t
WHERE
ST_Contains(t.wkb_geometry, a.wkb_geometry);
টেবিলটি বজায় রাখুন যাতে পোস্টগ্রিইগুলি সহজেই চলতে থাকে:
vacuum mcdon_addresses_wtract;
এখন আমার দুটি প্রশ্ন ছিল ..
এস এস কনটেনগুলি আসলে কাজ করেছিল? .. এবং .. আমার ব্যবহৃত ডেটা ইনপুটগুলি দেখে ঠিকানাগুলি কীভাবে ফিরিয়েছে সেগুলি কী বোঝায়?
আমি একই ক্যোয়ারী ব্যবহার করে উভয়ের উত্তর দিতে সক্ষম হয়েছি:
select count(*) from mcdon_addresses_wtract;
-- returns 11848
ক্ষতির উপর একটি দ্রুত প্রতিচ্ছবি: প্রথমত, আমি আরকজিআইএস-এ পরীক্ষা করেছিলাম (আপনি কিউজিআইএস এ এটিও করতে পারেন) এবং এটি একই গণনা ফিরিয়ে দিয়েছে। তাহলে, কেন পার্থক্য? প্রথমত, কয়েকটি ঠিকানা মিসৌরির বাইরে পড়েছিল এবং আমি কেবল একটি মিসৌরি ট্র্যাক্ট বহুভুজের তুলনায় তুলনা করি। দ্বিতীয়ত, কাছাকাছি বিশ্লেষণ করলে মনে হয় ঠিকানাগুলির ডেটাতে খারাপ ডিজিটাইজেশনের কয়েকটি উদাহরণ রয়েছে। বিশেষত, বেশিরভাগ পয়েন্টের দ্বারা ধরা পড়েনি ST_Contains
খালি অ্যাট্রিবিউট ক্ষেত্রগুলি ছিল, এটি একটি ভাল লক্ষণ যা ডিজিটাইজেশনের সময় কিছু খারাপ হয়েছিল; এর অর্থ হ'ল তারা কোনওভাবেই ব্যবহারযোগ্য ডেটা ছিল না। এই মুহুর্তে, আমি পার্থক্যগুলির সাথে স্বাচ্ছন্দ্য বোধ করছি কারণ আমি যুক্তিসঙ্গতভাবে ফিরে যেতে পারি এবং ডেটার উন্নত করতে পারি, একটি পরিষ্কার বিশ্লেষণের অনুমতি দিয়ে।
এগিয়ে চলার পরের ধাপটি ব্লকস ডেটা থেকে বৈশিষ্ট্যযুক্ত ঠিকানা / ট্র্যাক্টস টেবিল সংযোজন করছিল। একইভাবে, আমি একটি নতুন টেবিল তৈরি করে এটি করেছি, প্রতিটি আউটপুট ক্ষেত্রটি যে টেবিলটি এসেছে তা নির্দেশ করার জন্য আবারও পূর্বনির্ধারণ করেছিলাম (আপনি যে উপসর্গটি দেখতে পাবেন তা বেশ গুরুত্বপূর্ণ):
CREATE TABLE mcdon_addr_trct_and_blk AS
SELECT
a.*,
b.pop90 AS blk_pop90,
b.white90 AS blk_white90,
b.black90 AS blk_black90,
b.asian90 AS blk_asian90,
b.amind90 AS blk_amind90,
b.other90 AS blk_other90,
b.hisp90 AS blk_hisp90
FROM
mcdon_addresses_wtract AS a,
mo_blocks_2010 AS b
WHERE
ST_Contains(b.wkb_geometry, a.wkb_geometry);
অবশ্যই, টেবিল বজায় রাখুন:
vacuum mcdon_addr_trct_and_blk;
আমি প্রতিটি আউটপুট ক্ষেত্রের উপসর্গ কারণ ছিল কারণ যদি আমি না করি তবে কিছু ক্ষেত্রের একই নাম থাকবে এবং চূড়ান্ত প্রোডাক্টের মধ্যে তাদের একে অপরের থেকে আলাদা করাও অসম্ভব হবে (এছাড়াও .. পোস্টগ্রিইএস মাঝখানে মাঝখানে অভিযোগ করেছে, তবে যেহেতু আমি নতুন নামকরণ করছিলাম, তাই আমি এটির সুযোগ দিইনি)। উদাহরণস্বরূপ, উপরের দুটি পদক্ষেপ থেকে নিম্নলিখিত দুটি ক্ষেত্র বিবেচনা করুন। আপনি দেখতে পাচ্ছেন কেন আমি তাদের নাম পরিবর্তন করেছি ..
t.pop90 AS tr_pop90 -- would have been simply pop90
b.pop90 AS blk_pop90 -- also would have been pop90 !
এখন যেহেতু ট্র্যাক্টস এবং ব্লকস ডেটাসেটের সাথে আমাদের একটি ঠিকানা রয়েছে, তখনও পয়েন্টের একই সংখ্যা রয়েছে?
select count(*) from mcdon_addr_trct_and_blk;
-- 11848 (thumbs up!)
হ্যা আমরা করি! আপনি যদি চান তবে আপনি এগিয়ে গিয়ে আমাদের তৈরি প্রথম টেবিলটি মুছতে পারেন mcdon_addresses_wtract
,। বিশ্লেষণের জন্য আমাদের আর এটির দরকার নেই।
শেষ পদক্ষেপ হিসাবে, আপনি পোস্টগ্রিএস থেকে আপনার ডেটা ইএসআরআই শেফফাইলে রফতানি করতে চাইতে পারেন যাতে আপনি এটি অন্যান্য প্রোগ্রামের সাথে দেখতে পেলেন যেমন আর্কজিআইএস (নোট, কিউজিআইএস ইস্যু ছাড়াই পোস্টজিআইএস ডেটা পড়তে পারে)। আপনি যদি আগ্রহী হন তবে ogr2ogr ব্যবহার করে আপনি কীভাবে রূপান্তরটি সম্পাদন করতে পারেন তা এখানে:
ogr2ogr -f "ESRI Shapefile" "E:\path_to\addr_trct_blk.shp" PG:"host=127.0.0.1 user=youruser dbname=yourdb password=yourpass" "mcdon_addr_trct_and_blk"
অবশেষে, আপনি যখন এই আদেশটি চালাবেন, আপনি সম্ভবত কিছু সতর্কতা পাবেন:
সতর্কতা:: সাধারণ / লন্ডারড ফিল্ডের নাম: 'tr_statefp10' থেকে 'tr_statefp'
এর অর্থ হ'ল ওজিআরকে সেই ক্ষেত্রের নামটি ছোট করতে হয়েছিল, কারণ শেফফিলের ক্ষেত্রে ক্ষেত্রের নামটি এত দীর্ঘ হতে পারে।
অবশ্যই, এই কাজটি সম্পাদন করার জন্য এটি অনেকগুলি উপায়ের মধ্যে একটি।