पाइथन का उपयोग करके प्रक्षेपित निर्देशांक से आकृति को परिवर्तित करें


10

यहां नौसिखिया जीआईएस से जूझ रहा है। मैं मिल्व्यूके शहर के लिए वार्डों को मैप करने की कोशिश कर रहा हूं, जो उनके काउंटी वेबसाइट काउंटी वेबसाइट पर पाए गए आकार के आकार का उपयोग करते हैं । मैं कुछ सफलता के साथ यहां सूत्र का पालन ​​कर रहा हूं । मेरा कोड देता है:

from pyproj import Proj, transform
# wisconsing EPSG:32054
# epsg:4326 is for the entire world, wgs 84...not obvious
inProj = Proj(init='epsg:32054')
outProj = Proj(init='epsg:4326')
x1,y1 = 2560131.496875003, 406816.434375003
x2,y2 = transform(inProj,outProj,x1,y1)
print(x2,y2)

आउटपुट के साथ,

-65.70220967836329 43.08590211722421

समस्या यह है कि यह गलत है। मिल्वौकी के लिए लोन / लेट -87.863984 और 42.920816 है।

दूसरी बात, मैं इस प्रोग्राम को पूरे शेपफाइल के लिए कैसे कर सकता हूं। मैं इसे बेसमैप में प्लॉट करना चाहूंगा। जब मैं इस धागे का अनुसरण करने की कोशिश करता हूं तो मुझे एक त्रुटि कोड मिलता है:

with fiona.open("ward2012/ward.shp") as shp:
    ori = Proj(init='epsg:32054' ),
    dest= Proj(init='EPSG:4326',preserve_units=True)
    with fiona.open('ward2012/MKE_wards_lat_lon.shp', 'w', 'ESRI Shapefile', shp.schema.copy(), crs=from_epsg(4326))as output:
        for point in shp:
            x,y =  point['geometry']['coordinates']
            point['geometry']['coordinates'] = transform(ori, dest,x,y)
            output.write(point)

त्रुटि:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-139-a5079ab39f99> in <module>()
      4     with fiona.open('ward2012/MKE_wards_lat_lon.shp', 'w', 'ESRI Shapefile', shp.schema.copy(), crs=from_epsg(4326))as output:
      5         for point in shp:
----> 6             x,y =  point['geometry']['coordinates']
      7             point['geometry']['coordinates'] = transform(ori, dest,x,y)
      8             output.write(point)

ValueError: not enough values to unpack (expected 2, got 1)

जवाबों:


10

पहले सवाल पर, 'एप्सग: 32054' कोड में पैरों की इकाइयाँ हैं। इस कारण से, inProj = Proj(init='epsg:32054')लाइन में पैरामीटर के रूप में 'preserve_units = True' का उपयोग करना आवश्यक है । अब, अगला कोड अच्छी तरह से काम करता है:

from pyproj import Proj, transform
# wisconsing EPSG:32054
# epsg:4326 is for the entire world, wgs 84...not obvious
inProj = Proj(init='epsg:32054', preserve_units=True)
outProj = Proj(init='epsg:4326')
x1,y1 = 2560131.496875003, 406816.434375003
x2,y2 = transform(inProj,outProj,x1,y1)
print (x2,y2)
(-87.9028568836077, 43.09691266312185)

दूसरे सवाल पर, वार्ड.शप बहुभुज आकार का है; एक बिंदु आकृति नहीं है। इस स्थिति में, आप जियोप्रैंडास मॉड्यूल को पुन: उपयोग के लिए उपयोग कर सकते हैं। मेरा प्रस्तावित कोड (मेरे विशेष पथ के साथ) है:

import geopandas as gpd

tmp = gpd.GeoDataFrame.from_file('/home/zeito/pyqgis_data/ward2012/ward.shp')

tmpWGS84 = tmp.to_crs({'proj':'longlat', 'ellps':'WGS84', 'datum':'WGS84'})

tmpWGS84.to_file('/home/zeito/pyqgis_data/ward2012/wardWGS84.shp')

अगली छवि में, आप QGIS के मैप कैनवस पर विचार करने से पहले रीप्रोक्टेड शेपफाइल (वार्ड डब्ल्यूजीएस84.shp) और बिंदु (-87.9028568836077, 43.09691266312185) देख सकते हैं।

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

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