কিউজিআইএস-এ আমি কীভাবে লাইনের দিক পরিবর্তন করতে পারি?


51

এমন কিছু যা আশা করি খুব সহজ।

আমি কিউজিআইএস-তে একটি পললাইন / লাইনের দিকটি অদলবদল করতে সক্ষম হতে চাই। আমি কয়েক বছর আগে ম্যাপআইএনফোতে এটি করার জন্য একটি কাস্টম সরঞ্জাম তৈরি করেছি, তবে কিউজিআইএস-এর জন্য আমি কিছু খুঁজে পাচ্ছি না বলে মনে হচ্ছে।

কেউ কি এটি করার কোনও সরঞ্জাম জানেন?

যদি কারও অস্তিত্ব না থাকে তবে আমি এটি তৈরি করতে গিয়ে খুশি, একটি ইতিমধ্যে তৈরি হয়েছে কিনা তা করতে চাইনি।


3
ভাল লাগবে। আমি এ জাতীয় কোনও QGIS ফাংশন জানি না।
আন্ডার ডার্ক

3
আমি কীভাবে এটি খুব সহজেই করতে পারি তা আমার একটি ভাল ধারণা আছে, আমি আজ রাতে কিছু বেত্রাঘাত করতে পারি কিনা তা আমি দেখতে পাচ্ছি।
নাথান ডাব্লু

গ্রেট! হতে পারে এটি এফটিউল / ভেক্টর সরঞ্জাম বাক্সে যুক্ত করা যেতে পারে।
আন্ডার ডার্ক

1
যেহেতু আপনি ইতিমধ্যে মূল যত্ন গ্রহণ করেছেন, আপনি এই প্রশ্নটি মোকাবেলা করার কোনও সুযোগ চান, তবে কিউজিআইএসের জন্য? gis.stackexchange.com/questions/9286/... resources.arcgis.com/content/kbase?fa=articleShow&d=20961
RyanDalton

1
টিকিটটি এখানে: hub.qgis.org/issues/4936
মাইক টি

উত্তর:


62

ঠিক আছে এখানে পাইথন যা আমি এটি করতাম:

layer = qgis.utils.iface.mapCanvas().currentLayer()
for feature in layer.selectedFeatures():
   geom = feature.geometry()
   nodes = geom.asPolyline()
   nodes.reverse() 
   newgeom = QgsGeometry.fromPolyline(nodes)
   layer.changeGeometry(feature.id(),newgeom)

উপরের কোডটি চালানোর আগে:

  1. আপনি যে স্তরটি সম্পাদনা করতে চান তা নির্বাচন করুন;
  2. টগল এডিটিং অন;
  3. আপনি এই বিপরীতে ফিরিয়ে আনতে চান এমন বৈশিষ্ট্য নির্বাচন করুন।

উপরের পাইথন কোডটি চালান:

  1. প্লাগইনগুলিতে> পাইথন কনসোল;
  2. উইন্ডোতে কোড অনুলিপি করা এবং আটকানো;
  3. চালাতে 2x এন্টার চাপুন।

এটির প্রতিটি বৈশিষ্ট্যের জন্য "সত্য" আউটপুট দেওয়া উচিত যার দিকটি অদলবদল হয়েছিল। যদি এটি "মিথ্যা" আউটপুট করে তবে এটি বৈশিষ্ট্যের দিকটি অদলবদল করে না। স্তরটিতে সম্পাদনা টগল না করা থাকলে এটি ঘটবে।

বেশ সহজ!

আমি এটিকে নামক একটি প্লাগইনে আবদ্ধ করেছি Swap Line Directionএবং এটি কিউজিআইএস প্লাগইন ইনস্টলারে উপলব্ধ available

প্লাগইন ইনস্টলারে এই প্লাগইনটি আর উপলব্ধ নেই (11/16/2015 হিসাবে) তবে আপনি " প্লাগইন বিল্ডার " প্লাগইনটি দিয়ে আপনার নিজের খুব সহজেই তৈরি করতে পারেন ।

FTools এর সাথে সংহত করা কতটা সহজ তা আমি একবার দেখে নেব।


1
সুতরাং আপনি নিজের সমাধান তৈরি করেছেন - ভাল হয়েছে - এটি কি ফুলগুলিতে যুক্ত করা যেতে পারে?
ম্যাপারজ

আমি নিশ্চিত যে এটি পারে, আমি কেবল fTools কোড করে দেখছি এবং প্যাচ লিখতে হবে।
নাথান ডাব্লু

ফ্যান্টাস্টিক! এর মতো সমাধানগুলি কিউজিআইএস ব্যবহার করতে আমার পছন্দ। চমৎকার কাজ নাথান - বিটিডাব্লু আমি আপনার ছোট ক্যাটালগ টাইপ প্লাগইনও পছন্দ করি!
Ando

ধন্যবাদ এবং ধন্যবাদ! আমি বিটা কয়েক নতুন আইডিয়া পরীক্ষা করছি, আকাঙ্ক্ষা করি এতে কাজ করার জন্য আমার আরও বেশি সময় দেওয়া উচিত যাতে আমি এটিকে আরও দ্রুত বের করতে পারি।
নাথান ডাব্লু

3
এটি সত্যিই দুর্দান্ত যে আপনি এত তাড়াতাড়ি এবং মার্জিতভাবে একটি সমাধান তৈরি করেছেন। ওপেন সোর্সের শক্তি আবার জিতেছে!
রায়ানডাল্টন

14

আপনি যদি ঘাস প্ল্যাগ ইন ব্যবহার v.flip - বিকল্প http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip

এখানে চিত্র বর্ণনা লিখুন


এইচএমএম আরও কিউজিআইএস নেটিভ উপায়ের জন্য আশা করছিল, এই মুহুর্তে গ্রাস ইনস্টল করবেন না। তবে এটি তাদের পক্ষে ভাল পরামর্শ good
নাথান

অজগর থাকতে ভাল এবং আন্ডারডार्কের দ্বারা উল্লিখিত ফুলগুলিতে যুক্ত করা ভাল।
ম্যাপারজ

6

নাথনের উত্তর অনুসরণ করে আপনি যে স্তরটিতে লাইনগুলি অদলবদল করতে চান সেখানে আপনি একটি অজগর কর্ম তৈরি করতে পারেন:

layer = QgsMapLayerRegistry.instance().mapLayer("_your_layer_id_")
r = QgsFeatureRequest([% $id %])
f = QgsFeature()
if layer.getFeatures(r).nextFeature(f):
  geom = f.geometry().asPolyline()
  geom.reverse()
  geom = QgsGeometry.fromPolyline(geom)
  if layer.changeGeometry([% $id %], geom):
    qgis.utils.iface.messageBar().pushMessage("Line swaped", QgsMessageBar.INFO, 2)
    qgis.utils.iface.mapCanvas().refresh()
  else:
    qgis.utils.iface.messageBar().pushMessage("Cannot swap line. Turn editing on.", QgsMessageBar.WARNING, 3)
else:
  qgis.utils.iface.messageBar().pushMessage("Cannot edit this feature.", QgsMessageBar.CRITICAL, 3)

আপনি একটি ক্লিক করে লাইনগুলি অদলবদল করতে সক্ষম হবেন। এটি অনেক ব্যবহারকারী-বান্ধব!


1
এই কোডটি ২.x এর জন্য
ডেনিস রাউজাউদ


4

এই প্লাগইনটি রেখার দিকটিও বিপরীত করে:

https://hub.qgis.org/projects/swapvectordirection

প্লাগইন আইকনটিতে ক্লিক করার আগে আপনাকে একটি বৈশিষ্ট্য নির্বাচন করতে হবে এবং স্তরটিকে সম্পাদনা মোডে পরিণত করতে হবে।


4

নাথনের পোস্টের উপর ভিত্তি করে আমি বৈশিষ্ট্যের দিকটি বিপরীত করতে একটি প্রসেসিং স্ক্রিপ্ট তৈরি করেছি:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# define Interface
##QGIS tools (QGIS 2.x)=group
##Reverse vector direction=name
##Input_layer=vector
##Only_selected_features=boolean true

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import *

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

# get input parameters from GUI
inlayer = processing.getObject(Input_layer)
selected = Only_selected_features

# check 'Only selected features' option
if selected is True and inlayer.selectedFeatureCount () == 0:
    raise RuntimeError('No features selected on Layer \'' + inlayer.name() + '\'.')

# check if input layer is editable
if not inlayer.isEditable():
    inlayer.startEditing()

# reverse vector direction
def reverse():
    geom = feature.geometry()
    nodes = geom.asPolyline()
    nodes.reverse()
    newgeom = QgsGeometry.fromPolyline(nodes)
    inlayer.changeGeometry(feature.id(),newgeom)

if selected is True:
    for feature in inlayer.selectedFeatures():
        reverse()
else:
    for feature in inlayer.getFeatures():
        reverse()

# refresh input layer
inlayer.dataProvider().forceReload()

এখানে চিত্র বর্ণনা লিখুন


আপনি জিআইএফ কিভাবে তৈরি করলেন?
জাজার


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