জিডিএল ব্যবহার করে শেফফিলিতে বহুভুজগুলির মোট ক্ষেত্রফল গণনা করুন?


11

ব্রিটিশ ন্যাশনাল গ্রিড প্রক্ষেপণে আমার একটি শেফফাইল রয়েছে:

Geometry: 3D Polygon
Feature Count: 5378
Extent: (9247.520209, 14785.170099) - (638149.173223, 1217788.569952)
Layer SRS WKT:
PROJCS["British_National_Grid",
    GEOGCS["GCS_airy",
        DATUM["OSGB_1936",
            SPHEROID["Airy_1830",6377563.396,299.3249646]],
        PRIMEM["Greenwich",0],
        UNIT["Degree",0.017453292519943295]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",49],
    PARAMETER["central_meridian",-2],
    PARAMETER["scale_factor",0.9996012717],
    PARAMETER["false_easting",400000],
    PARAMETER["false_northing",-100000],
    UNIT["Meter",1]]
cat: Integer (9.0)

হেক্টর জমিতে শেফফিলের সমস্ত বহুভুজের মোট ক্ষেত্র পেতে আমি জিডিএল / ওজিআর ব্যবহার করতে পারি?

আমি ভাবছি যে এটি দিয়ে কি সম্ভব -sql, এরকম কিছু:

ogrinfo -sql "SELECT SUM(ST_Area(geom::geography)) FROM mytable" myshapefile.shp

কিন্তু চেষ্টা করছি যে আমি পেয়েছি ERROR 1: Undefined function 'ST_Area' used.

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

উত্তর:


15

ওজিআর এসকিউএলে ওজিআর_জিইওএম_আরইএ নামে একটি বিশেষ ক্ষেত্র রয়েছে যা বৈশিষ্ট্যের জ্যামিতির ক্ষেত্রটি প্রদান করে:

ogrinfo -sql "SELECT SUM(OGR_GEOM_AREA) AS TOTAL_AREA FROM myshapefile" myshapefile.shp

যেখানে TOTAL_AREAপরিমাপের একক স্তর এসআরএস দ্বারা নির্ভর করে (নীচের মন্তব্যগুলি পড়ুন)।


অ্যামেজিং! এই আমাকে দেয় SUM_OGR_GEOM_AREA (Real) = 4459037129.50955। এটি হেক্টর বা অন্য কোনও ইউনিটে? এবং আমার উত্সের শেফফাইলটি কী প্রক্ষেপণে রয়েছে তা বিবেচনা করে?
রিচার্ড

1
আপনার জ্যামিতিগুলি কীভাবে অনুমান করা হয় তা থেকে পরিমাপের এককটি উত্পন্ন হয়, সুতরাং সেগুলি বর্গ মিটার।
আন্তোনিও ফ্যালকিয়ানো

1
সম্ভবত এম ^ 2 এ, 10000 দ্বারা ভাগ করে হেক্টরে রূপান্তরিত করুন
dmci

ধন্যবাদ! আমি সবেমাত্র দস্তাবেজগুলি পেয়েছি: gdal.org/classOGRSurface.html#a3b2c3125ec8c0b3a986e43cd1056f9e4 ব্যবহৃত স্থানিক রেফারেন্স সিস্টেমের বর্গ ইউনিটের বৈশিষ্ট্যের ক্ষেত্রটি ফিরিয়ে দেয় । মোট শিক্ষানবিশ হিসাবে দুঃখিত, তবে কেবলমাত্র আমি যদি অন্য কোনও এসআরএসে একটি শেফফিল ব্যবহার করছি তবে আমি কীভাবে একটি বিশেষ এসআরএস এর বর্গ ইউনিটগুলি কী কী তা জানতে পারি?
রিচার্ড

1
আপনার স্তরটি এসআরএস ডব্লিউকেটি (অর্থাত্ প্রোজেকশন ফাইল) সন্ধান করে, আপনি ইউএনআইটি ["মিটার", 1]] পাবেন
এন্টোনিও ফ্যালকিয়ানো

6

হ্যাঁ, এটি সম্ভব, তবে আপনাকে নিম্নলিখিত ওজিআর এসকিউএলাইট উপভাষাটি ব্যবহার করতে হবে :

ogrinfo -dialect SQLite -sql 'SELECT SUM(ST_Area(geometry))/10000 FROM myshapefile' myshapefile.shp

এছাড়াও, myshapefileএটি স্তরের নাম কিনা তা নিশ্চিত করুন myshapefile.shp। আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন:

ogrinfo myshapefile.shp

INFO: Open of `myshapefile.shp`
    using driver `ESRI Shapefile' successful.
1: myshapefile (Polygon)

ধন্যবাদ! আসলে দেখছি no such column: geometry। জ্যামিতি কলামটি কী বলা হয় তা আমি কীভাবে খুঁজে বের করব? এই আউটপুট হয় ogrinfo -al -fid 1: OGRFeature(mylayer):1 cat (Integer) = 2 POLYGON ((463267.036276041297242 1216886.583904854720458 0,463267.693611663184129 1216956.525473011657596 0,463405.369117364054546 1216820.109560555079952 0,463404.712737055611797 1216750.1665881925728170,463267.036276041297242 1216886.583904854720458 0,463267.036276041297242 1216886.583904854720458 0))
রিচার্ড

1
ডু ogrinfo -so -alবিট @ ডিএমসি, আমি আপনার উত্তরে একটি বিট বুঝতে পারি না: জিডিএল শেফফাইলে সর্বদা একটি স্তর থাকে এবং এর নামটি শেফফিলের ভিত্তি নাম। কীভাবে আপনি "মাইস্পাইফিল" এর পরিবর্তে "মাইটিবেল" নাম পেতে পারেন?
ব্যবহারকারী 30184

ধন্যবাদ! এই কমান্ড থেকে আউটপুট মূল প্রশ্নে।
রিচার্ড

@ ব্যবহারকারী 30184 - সম্পূর্ণ সম্মত - তবে ওপি তাদের প্রশ্নের জন্য যে নামকরণের কনভেনশনগুলি ব্যবহার করেছিল সেগুলি আমি প্রতিলিপি করছিলাম। ধারাবাহিকতার জন্য, আমি আমার নিজের উত্তর আপডেট করেছি
dmci

2
ঠিক আছে, এটি ড্রাইভার নির্দিষ্ট বলে মনে হচ্ছে। কিছু ড্রাইভার Geometry Column = GEOMETRYওগ্রিনফো-তে-ও-এর মতো এটি রিপোর্ট করে তবে শেফফাইল ড্রাইভার তা করেন না। শেফফায়ালগুলির সাথে আমি অনুমান করি যে নামটি ওজিআর এসকিউএল ডায়ালেক্টের জন্য "OGR_GEOMETRY" ( gdal.org/ogr_sql.html এর বিশেষ ক্ষেত্রগুলি দেখুন ) এবং এসকিউএল ডায়ালেক্টের জন্য "জ্যামিতি"।
ব্যবহারকারী 30184

4

কিউজিআইএস ব্যবহার করে, আপনি শেফফিলের মোট ক্ষেত্রটি মুদ্রণের জন্য এই সাধারণ কোডটি চালাতে পারেন (আমি ধরে নিই যে আপনি অনুমানিত রেফারেন্স সিস্টেমে অঞ্চলটি মূল্যায়ন করছেন):

from qgis.core import *

filepath = 'C:/Users/path_to_the_shapefile/shapefile.shp'
layer = QgsVectorLayer(filepath, 'layer' , 'ogr')

area = 0
for feat in layer.getFeatures():
    area += feat.geometry().area()

print area # total area in square meters

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