जियोफोन का उपयोग कर बहुभुज क्षेत्र प्राप्त कर रहे हैं?


16

पॉलीगनों की एक geopandas GeoDataFrameश्रृंखला को देखते हुए , मैं अपनी सूची में प्रत्येक सुविधा के किमी वर्ग में क्षेत्र प्राप्त करना चाहूंगा।

यह एक बहुत ही आम समस्या है, और अतीत में सामान्य रूप से सुझाए गए समाधान का उपयोग करना shapelyऔर pyprojसीधे (जैसे यहां और यहां ) किया गया है।

क्या शुद्ध में ऐसा करने का कोई तरीका है geopandas?

जवाबों:


17

यदि GeoDataFrame के crs को जाना जाता है (EPSG: 4326 यूनिट = डिग्री, यहाँ), तो आपको अपनी स्क्रिप्ट में Shapely, और pyproj की आवश्यकता नहीं है क्योंकि GeoPandas उनका उपयोग करता है)।

import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")
print test.crs
test.head(2)

यहाँ छवि विवरण दर्ज करें

अब अपने GeoDataFrame को कॉपी करें और प्रोजेक्शन सिस्टम में प्रोजेक्शन को बदलें (EPSG: 3857, unit = m जैसा कि ResMar के उत्तर में है)

tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
tost.head(2)

यहाँ छवि विवरण दर्ज करें

अब वर्ग किलोमीटर में क्षेत्र

tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)

यहाँ छवि विवरण दर्ज करें

लेकिन मर्केटर प्रोजेक्शन में सतहें सही नहीं हैं, इसलिए मीटर में अन्य प्रोजेक्शन के साथ।

tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)

यहाँ छवि विवरण दर्ज करें


आपका पाठ है epsg:3857, लेकिन आपका कोड है epsg:3395, दोनों में से कौन सही है?
अलेक्सी बिलोगुर

4
.to_crsसमारोह के लिए पारित हो जाता है pyprojवैसे भी। समान क्षेत्र प्रक्षेपण का एक अच्छा उदाहरण: proj4.org/projections/cea.html जिसे निम्नानुसार पारित किया जा सकता है:.to_crs({'proj':'cea'})
स्वियर

कम से कम अमेरिकी जनगणना ट्रैक्ट्स के आकार-प्रकार के लिए, मैं पुष्टि कर सकता हूं कि {'proj':'cea'}निकटतम क्षेत्र का अनुमान है।
पोलर बीयर

4

मुझे विश्वास है हाँ। निम्नलिखित को काम करना चाहिए:

gdf['geometry'].to_crs({'init': 'epsg:3395'})\
               .map(lambda p: p.area / 10**6)

यह ज्यामिति को एक समान क्षेत्र के प्रक्षेपण में परिवर्तित करता है, क्षेत्र को लाता है shapely(मीटर ^ 2 में लौटता है), और नक्शे पर एक किमी ^ 2 (यह अंतिम चरण वैकल्पिक है)।


क्या ये सही है?
अलेक्सी बिलोगुर

1
ईपीएसजी 3857 बराबर क्षेत्र नहीं है। en.wikipedia.org/wiki/Map_projection#Equal-area
alphabetasoup

मैंने जीन के epsg:3395सीआरएस को फिट करने के लिए इस उत्तर को संशोधित किया है । धन्यवाद।
अलेक्सी बिलोगुर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.