স্থানাঙ্কের বহুভুজ থেকে কেএমের ক্ষেত্রফল


14

আমার কাছে (পাইথন সুগঠিত) স্থানাঙ্কগুলি থেকে বহুভুজ রয়েছে যা দেখতে দেখতে এটির মতো লাগে

POLYGON ((24.8085317 46.8512821, 24.7986952 46.8574619, 24.8088238 46.8664741, 24.8155239 46.8576335, 24.8085317 46.8512821))

আমি এই বহুভুজের ক্ষেত্রফল কিমি ^ 2 এ গণনা করতে চাই। পাইথনে এটি করার সর্বোত্তম উপায় কী হবে?


1
আপনি তাকান করতে পারে stackoverflow.com/questions/23697374/...
SIslam

উপরের সমাধানগুলির একটি প্রয়োগ করতে যদি আপনি নীচের ত্রুটিটি পেয়ে থাকেন তবে এটি কারণ হ'ল ল্যাট 1 এবং ল্যাট 2 হ'ল লাইট_1 এবং ল্যাট 2: পিপ্রোজ.অ্যাসপশনস.সি.সি.এস.আরআর: অবৈধ অভিক্ষেপ: + প্রজ = আইএ + ল্যাট 1 = 37.843975868971484 + ল্যাট 2 = 37.844325658890924 + টাইপ = সিআরএস: (অভ্যন্তরীণ প্রজ ত্রুটি: প্রজ_স্রষ্টা: ত্রুটি -21: শঙ্কু ল্যাট_1 = -লিট 2)
রামতিন কারমানি

উত্তর:


20

@ সিসিলি উত্তরটি কীভাবে ব্যবহার করবেন তা আমার কাছে সহজেই প্রকাশিত হয়নি, সুতরাং এখানে আরও ভার্জিক সংস্করণ রয়েছে:

import pyproj    
import shapely
import shapely.ops as ops
from shapely.geometry.polygon import Polygon
from functools import partial


geom = Polygon([(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)])
geom_area = ops.transform(
    partial(
        pyproj.transform,
        pyproj.Proj(init='EPSG:4326'),
        pyproj.Proj(
            proj='aea',
            lat1=geom.bounds[1],
            lat2=geom.bounds[3])),
    geom)

# Print the area in m^2
print geom_area.area 

1
ফলস্বরূপ মানটি জিওজসন.ইও-তে প্রাপ্ত হিসাবে একরকম নয় । কেন?
অ্যাস্ট্রজুয়ানলু

16

দেখে মনে হচ্ছে আপনার স্থানাঙ্কগুলি দ্রাঘিমাংশ এবং অক্ষাংশ, হ্যাঁ? shapely.ops.transformবহুভুজকে প্রমানিত সমান অঞ্চল স্থানাঙ্কে রূপান্তর করতে শ্যাপলির ফাংশনটি ব্যবহার করুন এবং তারপরে অঞ্চলটি গ্রহণ করুন।

python
import pyproj
from functools import partial

geom_aea = transform(
partial(
    pyproj.transform,
    pyproj.Proj(init='EPSG:4326'),
    pyproj.Proj(
        proj='aea',
        lat1=geom.bounds[1],
        lat2=geom.bounds[3])),
geom)

print(geom_aea.area)
# Output in m^2: 1083461.9234313113 

1
আপনার সম্ভবত সম্ভবত এটি partialঅন্তর্নির্মিত নয়; pyprojআমদানি করতে হবে এবং সম্ভবত ইনস্টল করতে হবে ইত্যাদি
কিংডালিয়ন

আমি খেয়াল করেছি pyproj.Proj(proj='aea', lat1=lat1, lat2=lat2)ফলাফল CRSError: Invalid projection: +proj=aea +lat1=5.0 +lat2=6.0 +type=crs। পরিবর্তন lat{1,2}মধ্যে lat_{1,2}যেমন উহ্য দ্বারা proj4 ডকুমেন্টেশন এটি সংশোধন করা হয়েছে: pyproj.Proj(proj='aea', lat1=lat1, lat2=lat2)। এই উত্তরটি কি সঠিক, বা এটি আপডেট করা উচিত?
হারবার্ট

1
আমার দরকার ছিল lat_1এবং এর lat_2পরিবর্তে lat1এবং lat2। আমি সন্দেহ করি এটি প্রজ 6.0.0.0
ortক্লাউড

3

উপরের উত্তরগুলি সঠিক বলে মনে হচ্ছে, এক্সেসপটিট করুন যে সম্প্রতি এক পর্যায়ে পাইপ্রোজ কোডের ল্যাট 1 এবং ল্যাট 2 পরামিতিগুলির নাম পরিবর্তন করে আন্ডারস্কোর করা হয়েছে: ল্যাট_1 এবং ল্যাট 2 (দেখুন /programming//a/55259718/1538758 )। আমার মন্তব্য করার মতো যথেষ্ট প্রতিবেদন নেই, তাই আমি একটি নতুন উত্তর দিচ্ছি (দুঃখিত দুঃখিত না)

import pyproj    
import shapely
import shapely.ops as ops
from shapely.geometry.polygon import Polygon
from functools import partial


geom = Polygon([(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)])
geom_area = ops.transform(
    partial(
        pyproj.transform,
        pyproj.Proj(init='EPSG:4326'),
        pyproj.Proj(
            proj='aea',
            lat_1=geom.bounds[1],
            lat_2=geom.bounds[3])),
    geom)

# Print the area in m^2
print geom_area.area 

1

আমি "অঞ্চল" জুড়ে হোঁচট খেয়েছি যা ব্যবহার করা সহজ বলে মনে হচ্ছে:

https://pypi.org/project/area/

উদাহরণ স্বরূপ:

from area import area

obj = {'type':'Polygon','coordinates':[[[24.8085317,46.8512821], [24.7986952,46.8574619], [24.8088238,46.8664741], [24.8155239,46.8576335], [24.8085317,46.8512821]]]}

area_m2 = area(obj)

area_km2 = area_m2 / 1e+6
print ('area m2:' + str(area_m2))
print ('area km2:' + str(area_km2))

... ফেরত:

আয়তন এম 2: 1082979.880942425

আয়তন কিমি 2: 1.082979880942425

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