GeoPandas to_file () समन्वय प्रणाली के बिना GeoDataFrame को बचाता है


13

मेरे पास है

  • जियोपांडास 0.2.1 py27_0
  • फियोना 1.7.0 np110py27_1
  • पायथन 2.7.10

एनाकोंडा 2-4.1.1-Windows-x86 वातावरण में स्थापित है। मैं GeoDataFrameइनपुट डेटासेट पढ़कर निर्माण कर सकता हूं और डेटा को संचालित कर सकता हूं फिर भी आउटपुट डेटा को सहेजना समन्वय प्रणाली को संरक्षित नहीं करता है।

import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world.to_file(driver='ESRI Shapefile',filename=r'C:\GIS\Temp\world_out.shp')

world_out.shpसुविधाओं और स्रोत शेपफ़ाइल की स्कीमा होते हैं, लेकिन समन्वय करता है प्रणाली अपरिभाषित है ( <Unknown>)। world_out.prjफ़ाइल 0 KB है और कुछ भी नहीं है।

out = gpd.read_file(r'C:\GIS\Temp\world_out.shp')
print out.crs
>>> {}

मैंने शुद्ध फियोना का उपयोग करके इस ऑपरेशन को करने के लिए परीक्षण किया है और यह ठीक काम करता है, crsजानकारी को संरक्षित करना :

import fiona

datasrc_path = r'C:\Program Files (x86)\ArcGIS\Desktop10.4\TemplateData\TemplateData.gdb'

with fiona.drivers():
    with fiona.open(datasrc_path,layer='cities') as source:
        meta = source.meta
        meta['driver'] = 'ESRI Shapefile'
        meta['layer'] = source.name

        with fiona.open(r'C:\GIS\CitiesFiona.shp', 'w', **meta) as sink:
            for f in source:
                sink.write(f)

CitiesFiona.prjफ़ाइल समन्वय प्रणाली के बारे में जानकारी नहीं है।

इसलिए, ऐसा लगता है कि जियोपांडास विधि को crsकॉल करते समय आउटपुट डेटासेट में डेटा फ़्रेम को पढ़ने / लिखने में सक्षम नहीं है to_file()। मैंने विभिन्न स्रोतों और डेटासेट से निर्मित to_file()पर कॉल करने की कोशिश की GeoDataFramesहै और आउटपुट डेटासेट में समन्वय प्रणाली की जानकारी कभी भी मौजूद नहीं थी।

किसी को भी इस मुद्दे में पहले भाग गया है? क्या कोई इसका परीक्षण कर सकता है?

जवाबों:


11

मैं इस व्यवहार से पहले आया हूं।

आपको to_file()विधि को अच्छी तरह से ज्ञात पाठ (crs_wkt) स्ट्रिंग को स्पष्ट रूप से पास करने की आवश्यकता है । स्ट्रिंग तब पास हो जाएगी fiona.open(), जो .prj फ़ाइल को लिखता है।

अपने नमूना कोड का उपयोग करना, कुछ इस तरह करना:

ws = r"D:\temp_se"
prj_file = gpd.datasets.get_path('naturalearth_lowres').replace(".shp",".prj")
prj = [l.strip() for l in open(prj_file,'r')][0]
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
temp_shp = os.path.join(ws,"world_out.shp")
world.to_file(filename=temp_shp,driver='ESRI Shapefile',crs_wkt=prj)

उत्पादन करना चाहिए: यहां छवि विवरण दर्ज करें

read_file()और to_file()कार्यों बस आवरण कार्यों के रूप में सेवा करते हैं। वे कहते हैं fiona.open(), जिनके हस्ताक्षर नीचे दिखाए गए हैं:

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

जियोपांडों के साथ फाइल पढ़ने / लिखने के लिए आपको स्पष्ट रूप से एक crs_wkt मान पास करना होगा।


1
इसे पोस्ट करने के लिए धन्यवाद। आश्चर्यजनक रूप से पर्याप्त है, मैं इस मुद्दे को अब और नहीं दोहरा सकता। जब मैं ऊपर पोस्ट किया गया कोड चलाता हूं, तो मुझे .prjफ़ाइल के बारे में जानकारी मिलती है crs। यह हो सकता है क्योंकि मैंने अपग्रेड किया fionaहै fiona 1.7.0 np110py27_2
एलेक्स टेरासेनकोव

दुर्भाग्य से नए संस्करणों में अभी भी समस्या है। मेरे पास जियोपांडास 0.4.1 और फियोना 1.8.4 है।
व्यूरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.