शेपली बहुभुज और मल्टीपॉलिगॉन ऑब्जेक्ट को बदलना


26

क्या आसपास की खुदाई करने और हाथ से निर्देशांक निकालने के बिना एक प्रक्षेपण से दूसरे प्रक्षेपण तक शेपली ऑब्जेक्ट्स (अर्थात्, पॉलीगोन और मल्टीपोलियन) को बदलने का एक आसान तरीका है?

वास्तव में, मुझे इस बात की भी परवाह नहीं है कि वे इस बिंदु पर शैप्युलर वस्तुएं हैं, मैं सिर्फ फीचर्स और एक प्रोजेक्शन को पास करना चाहता हूं, और फीचर्स को दोबारा सेट करना चाहता हूं।

क्या इस प्रकार की कार्यक्षमता मौजूद है, या इसे कोडित किया जाना चाहिए?


2
मेरा मानना ​​है कि यह शेपली के दायरे से बाहर है, आप फियोना में देखना चाह सकते हैं। fiona.transformलगता है कि आपको क्या चाहिए।
जेसन शेखर

जवाबों:


50

जबकि सुडौल मूल रूप से समन्वय प्रणालियों को मूल रूप से नहीं समझते हैं, shapely.ops.transform()साथ में ऐसा कर सकते हैं pyproj। यदि pyproj.Projआप अपने दोनों समन्वय प्रणालियों को समझ सकते हैं, तो इसे एक फ़ंक्शन में बनाया जा सकता है जो आकार में बदल सकता है।

सुडौल डॉक्स से :

from functools import partial
import pyproj
from shapely.ops import transform

project = partial(
    pyproj.transform,
    pyproj.Proj(init='epsg:4326'), # source coordinate system
    pyproj.Proj(init='epsg:26913')) # destination coordinate system

g2 = transform(project, g1)  # apply projection

4
यदि आप उस itertoolsमॉड्यूल का उपयोग नहीं करना चाहते हैं जो आप कर सकते हैं project = lambda x, y: pyproj.transform(pyproj.Proj(init='epsg:4326'), pyproj.Proj(init='epsg:26913'), x, y)और फिर g2 = transform(project, g1)
Elmex80s

1
यह सुझाया गया उत्तर pyproj1 के लिए है, जबकि अब pyproj2 का उपयोग करने के लिए एक पसंदीदा परिवर्तन है Transformer। यहां देखें: pyproj4.github.io/pyproj/stable/gotchas.html
ज्ञान के लिए प्यास

11

जियोपैन्डस का उपयोग करते हुए एक बेहतर समाधान नहीं है, अपेक्षाकृत सरल प्रक्षेपण के लिए अनुमति देता है। उदाहरण के लिए, यदि हम एक आकृति को ESPG 4326 में बदलना चाहते हैं:

import geopandas as gpd

HabModelEnviro = gpd.GeoDataFrame.from_file('data/HabModelEnviro.shp').replace({-999: None})

HabModelEnviroWGS84 = HabModelEnviro.to_crs({'proj':'longlat', 'ellps':'WGS84', 'datum':'WGS84'})

6
Geopandas Shapely का उपयोग करता है (उदाहरण के लिए geodataframe.py पर गौर करें)
जीन

0

यदि आप pyproj2 का उपयोग कर रहे हैं, तो ट्रांसफार्मर का उपयोग करना बहुत आसान है। यहाँ एक उदाहरण है:

import pyproj
from shapely.ops import transform

project = pyproj.Transformer.from_proj(
    pyproj.Proj(init='epsg:4326'), # source coordinate system
    pyproj.Proj(init='epsg:26913')) # destination coordinate system

# g1 is a shapley Polygon

g2 = transform(project.transform, g1)  # apply projection

यह भी बहुत तेज है, बेज़े पाइप्रोज़ को हर बिंदु के लिए प्रक्षेपण को फिर से बनाने की आवश्यकता नहीं है।

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