শেপলি পলিগন এবং মাল্টিপলিগন বস্তু রূপান্তর করা


26

চারপাশে খনন না করে এবং হাতের মাধ্যমে স্থানাঙ্কগুলি আহরণ না করে শেপলি অবজেক্টস (যথা, বহুভুজ এবং মাল্টিপলিগনস) কে এক প্রজেকশন থেকে অন্যটিতে রূপান্তর করার কোনও সহজ উপায় আছে?

প্রকৃতপক্ষে, আমি এখুনি সেগুলি আকারযুক্ত বস্তুগুলি কিনা সেদিকেও খেয়াল রাখি না, আমি কেবল বৈশিষ্ট্য এবং একটি প্রজেকশনটি পাস করতে চাই এবং ফিচারগুলির একটি পুনঃপ্রকাশিত সেট ফিরে পেতে চাই।

এই ধরণের কার্যকারিতা বিদ্যমান কি না এটি অবশ্যই হাতের কোডিং করা উচিত?


2
আমি বিশ্বাস করি যে এটি শেপলির বাইরে নয়, আপনি ফিয়োনাকে সন্ধান করতে পারেন। fiona.transformআপনার যা প্রয়োজন তা দেখায়।
জেসন স্কায়ার

উত্তর:


50

যদিও সুবহুলভাবে স্থানীয়ভাবে সমন্বয় ব্যবস্থা বোঝে shapely.ops.transform()না, পাশাপাশি এটিও করতে পারে pyproj। যদি pyproj.Projআপনার উভয় সমন্বয় ব্যবস্থা বুঝতে পারে তবে এটি এমন কোনও ফাংশনে তৈরি করা যেতে পারে যা রূপান্তরিত করে can

আকৃতির দস্তাবেজগুলি থেকে :

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)
এলমেক্স 80s

1
এই প্রস্তাবিত উত্তরটি পাইপ্রোজ 1 এর জন্য যেখানে এখন পাইপ্রোজ 2 ব্যবহারের জন্য পছন্দসই রূপান্তর রয়েছে 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
জিওপান্ডাস শেপলি ব্যবহার করে (উদাহরণস্বরূপ জিওডাটাফ্রেম.পি দেখুন)
জেন

0

আপনি যদি পাইপ্রোজ 2 ব্যবহার করছেন তবে ট্রান্সফর্মার ব্যবহার করা আরও সহজ। এখানে একটি উদাহরণ:

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

এটি আরও দ্রুত, কারণ পাইপ্রোজকে প্রতিটি পয়েন্টের জন্য প্রজেকশনটি পুনরায় তৈরি করতে হবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.