স্তর সিআরএস সংজ্ঞায়িত করা এবং পাইকিজিআইএস-এ সিআরএস ডায়ালগ এড়ানো?


16

একটি বিদ্যমান শেফিল রয়েছে, যা আমি যুক্ত করতে চাই।

এই মুহুর্তে আমার কোডটি দেখে মনে হচ্ছে:

self.iface.addVectorLayer(self.shpFilePath, "Track", "ogr")

এটি দুর্দান্ত কাজ করে তবে আমি কোডের মধ্যে সিআরএস সংজ্ঞায়িত করতে চাই। এটা কি সম্ভব? আমি এই জাতীয় কিছু অনুরূপ প্রশ্ন পেয়েছি: প্রোগ্রামারিকভাবে পাইথন ব্যবহার করে কিউজিআইএস ২.৪ এ একটি সিআরএস নির্বাচন করুন

তবে আমি এটি কোনওভাবেই পাই না।

উত্তর:


8

আমি অনুরূপ সমস্যাটি এইভাবে সমাধান করি:

from qgis.core import *
from qgis.gui import *

layer = QgsVectorLayer(self.shpFilePath, "Track", "ogr")
crs = layer.crs()
crs.createFromId(4326)
layer.setCrs(crs)
QgsMapLayerRegistry.instance().addMapLayer(layer)

4
তবে এটি এখনও আমাকে সংলাপে সিআরএস জিজ্ঞাসা করে?
মোস্তফা উয়ার

সিআরএস ডায়ালগ হাজির!
রবার্তো মারজোচিচি

gis.stackexchange.com/a/325796/77806 - কথোপকথন উপস্থিত হবে না, নিশ্চিত হয়েছে
পাভেল পেরেরজেজেভ

6

এই ব্লগ পোস্ট এবং উত্তরটির ভিত্তিতে আমি পাইকগিসে একটি রাস্টার স্তরটির সিআরএস কীভাবে নির্দিষ্ট করতে পারি? , আপনি যা চান তা অর্জন করতে পারেন:

settings = QSettings()
# Take the "CRS for new layers" config, overwrite it while loading layers and...
oldProjValue = settings.value( "/Projections/defaultBehavior", "prompt", type=str )
settings.setValue( "/Projections/defaultBehavior", "useProject" )

# YOUR CODE TO LOAD THE LAYER GOES HERE

# ... then set the "CRS for new layers" back
settings.setValue( "/Projections/defaultBehavior", oldProjValue )

দ্রষ্টব্য: আপনি এখনও কিউজিআইএস ভি 2.x (বিটিডাব্লু, আপনার হওয়া উচিত নয়: পি) ব্যবহার করছেন তবে পরিবর্তে পরিবর্তিত নাম "/ প্রজেকশনস / ডিফল্ট বিহাইভিওর" ব্যবহার করুন।


5

নিম্নলিখিত কোডটি আপনাকে সিআরএস পপআপ উইন্ডোটি উপস্থিত হওয়া থেকে সরাতে একটি ভেক্টর স্তর যুক্ত করার অনুমতি দেয় (ন্যূনতম এটি আমার কাছে প্রদর্শিত হবে না):

from qgis import *
from qgis.utils import *

#replace "shapefile_path" with your layer's path; replace "Layer_name" with whatever name you want to give the layer in the TOC
qgis.utils.iface.addVectorLayer("shapefile_path", "Layer_name", "ogr")

#Use loaded layer as active layer to set the CRS
myLayer = qgis.utils.iface.activeLayer()
myLayer.setCrs(QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId))

#Sets canvas CRS
my_crs = core.QgsCoordinateReferenceSystem(4326, core.QgsCoordinateReferenceSystem.EpsgCrsId)
iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

4326উভয় ক্ষেত্রে কেবল সিআরএস মানটি আপনার পছন্দসই কর্তৃপক্ষের আইডিতে চিত্রটিতে প্রদর্শিত হিসাবে পরিবর্তন করুন :

সিআরএস বিকল্পসমূহ


1
আপনার উত্তরের জন্য ধন্যবাদ! তবে মূল সমস্যাটি হ'ল আমি যখন স্তরটি লোড করি তখন একটি ডায়ালগ উপস্থিত হয় যেখানে আমি সিআরএস চয়ন করতে পারি। এটি লুকানো বা অক্ষম করা সম্ভব?
Hinne123

আমার পোস্ট সম্পাদিত, যখন আমি কমান্ডগুলি চালনা করি তখন আমি কোনও ডায়ালগ উইন্ডো পাই না। আশা করি আপনি হয় না!
জোসেফ

2
সিআরএস উইন্ডো কেবল তখনই উপস্থিত হয় যদি কোডটিতে সিআরএস সেট করা না থাকে। যতক্ষণ আপনি এটি সেট হিসাবে আপনি ভাল হবে।
ব্রিটিশ স্টিল

@ ব্রিটিশস্টিল - এটি উল্লেখ করার জন্য আপনাকে ধন্যবাদ! আমি জানতাম না যে ঘটনাটি ছিল।
জোসেফ

3

কয়েক মাস পরে আমি একটি সমাধান পেয়েছি। আপনার স্ক্রিপ্টের আগের এবং শেষের দুটি লাইন যুক্ত করা উচিত যা @ ডোমোকস এন্ড্রে থেকে:

import os

iface.mainWindow().blockSignals(True)

layer = QgsVectorLayer(path, "My Layer",  "ogr")
crs = layer.crs()
crs.createFromId(32637)  # Whatever CRS you want
layer.setCrs(crs)

QgsProject.instance().addMapLayer(layer)
iface.mainWindow().blockSignals(False)

1

আমার জন্য উপরের কোনও সমাধান কাজ করে না। হতে পারে কারণ আমি সিএসভি ভেক্টর স্তর হিসাবে লোড করছি, কোনও আকার ফাইল নয়। আমি এটিকে কাজ করার একমাত্র উপায় হ'ল:

crs = QgsCoordinateReferenceSystem(2180)
self.iface.mapCanvas().mapRenderer().setDestinationCrs(crs)
vlayer = QgsVectorLayer(filePath, "layer name", "ogr")
vlayer.setCrs(QgsCoordinateReferenceSystem(2180))

0

এই উত্তরটি বর্ণনা করে যে কীভাবে প্রথমে মেমরিতে ফাইল লোড করতে ব্যবহৃত ইউআরএলটিতে সিআরএস নির্দিষ্ট করে এই ডায়ালগটি এড়ানো যায়। সুতরাং শেফিল পথটি সরাসরি যাবার পরিবর্তে উপযুক্ত ইউআরএল দিয়ে addVectorLayer()একটি তৈরি করুন QgsVectorLayerএবং তারপরে কল করুন addMapLayer()

import urlparse
import urllib

baseuri = urlparse.urljoin('file:', urllib.pathname2url(self.shpFilePath))
uri = baseuri + "?crs=EPSG:4326"
vlayer = QgsVectorLayer(uri, "result", "memory")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.