निर्देशांक के बहुभुज से केएम में क्षेत्र


15

मुझे इस तरह से दिखने वाले (अजगर के आकार का) में निर्देशांक से बहुभुज हैं

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

मैं इस बहुभुज के क्षेत्रफल की गणना ^ 2 किमी में करना चाहूंगा। पायथन में ऐसा करने का सबसे अच्छा तरीका क्या होगा?



यदि आपको उपरोक्त समाधानों में से एक को लागू करने में निम्नलिखित त्रुटि हो रही है, तो यह है कि lat1 और lat2 को lat_1 और lat_2 होना चाहिए: pyproj.exception.CRSError: अमान्य प्रक्षेपण: + proj = aea + lat1 - 37.843975868971484 + lat2 = 37.844325658890924 + प्रकार = crs: (आंतरिक प्रोज त्रुटि: proj_create: त्रुटि -21: शंकु lat_1 = -lat_2)
रामतिन करमानी

जवाबों:


21

यह मेरे लिए स्पष्ट रूप से स्पष्ट नहीं था कि कैसे @sgillies उत्तर का उपयोग किया जाए, इसलिए यहां एक अधिक वर्बोज़ संस्करण दिया गया है:

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
परिणामी मान बिल्कुल वैसा नहीं है जैसा कि geojson.io में प्राप्त किया गया है । क्यों?
एस्ट्रोजूनलू

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=crsProj4 प्रलेखन द्वारा निहित के रूप lat{1,2}में बदलना यह तय :। क्या यह उत्तर सटीक है, या इसे अद्यतन किया जाना चाहिए? lat_{1,2}pyproj.Proj(proj='aea', lat1=lat1, lat2=lat2)
हरबर्ट

1
मैं का उपयोग करने के लिए आवश्यक lat_1और lat_2के बजाय lat1और lat2। मुझे संदेह है कि यह पोस्ट PROJ 6.0.0
oortCloud

3

उपरोक्त उत्तर सही प्रतीत होते हैं, उदाहरण दें कि हाल ही में, कुछ बिंदु पर, pyproj कोड में lat1 और lat2 मापदंडों को अंडरस्कोर: lat_1 और lat_2 (देखें /programming//a/55559718/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))

... रिटर्न:

क्षेत्र m2: 1082979.880942425

क्षेत्रफल km2: 1.082979880942425

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.