क्या "स्थान द्वारा विशेषताओं में शामिल होने" के लिए एक अजगर विकल्प है?


9

मैं join attributes by locationQGIS मेनू वेक्टर> डेटा प्रबंधन उपकरण पर पाए गए कार्य को करने की कोशिश कर रहा हूं । मैं इसके लिए एक ओपन सोर्स अजगर विकल्प की तलाश कर रहा हूं। मुझे पता है कि आर्कपी का एक spatial joinकार्य है, लेकिन मैं इसे ईएसआरआई वातावरण के बाहर प्रदर्शन करने की कोशिश कर रहा हूं।


1
मैं प्लगइन Join attributes by locationसे वास्तविक कमांड के स्रोत कोड को देखने का सुझाव fToolsदूंगा: doSpatialJoin.pyविशेष रूप से compute()विधि। उस से किसी भी यूआई कोड को खत्म करने और एक सादे अजगर समारोह के लिए इसे नीचे पट्टी करने के लिए बहुत मुश्किल नहीं होना चाहिए।
लुकास ग्राफ

नमस्ते, मुझे थोड़ी सी अलग समस्या है, मैं जांच करना चाहता हूं कि क्या दो परत के बीच एक संयुक्त है! मैं इसके लिए एक खुला स्रोत अजगर विकल्प की मांग कर रहा हूं। अगर s.join फ़ंक्शन का उपयोग किया गया है, तो मैं परीक्षण करना चाहता हूं और मैं ESRI वातावरण के बाहर यह प्रदर्शन करने की कोशिश कर रहा हूं .. क्या कोई मुझे कृपया मदद कर सकता है!
रनिया बेन ओथमेन

जवाबों:


8

आप Shapely और Fiona पर एक नज़र रखना चाह सकते हैं । Fiona स्थानिक फ़ाइल आयात और निर्यात को आसान बनाने के लिए गदल के लिए एक आवरण है। Shapely ज्यामिति कार्यक्षमता प्रदान करता है। आपको यह विचार देने के लिए एक बहुत ही सरल उदाहरण दिया गया है। यह बहुभुज विशेषताओं को उस बहुभुज के भीतर सभी बिंदुओं से जोड़ता है।

उदाहरण डेटा मैंने उपयोग किया है ये बहुभुज और ये बिंदु हैं

import fiona
from shapely.geometry import shape
from copy import deepcopy

with fiona.open("planning_neighborhoods.shp", "r") as n: 

    with fiona.open("Schools_Private_Pt.shp", "r") as s:

        # create a schema for the attributes
        outSchema =  deepcopy(s.schema)
        outSchema['properties'].update(n.schema['properties'])

        with fiona.open ("Schools_withNbhd.shp", "w", s.driver, outSchema, s.crs) as output:

            for school in s: 
                for neighborhood in n:
                    # check if point is in polygon and set attribute
                    if shape(school['geometry']).within(shape(neighborhood['geometry'])):  
                        school['properties']['neighborho'] = neighborhood['properties']['neighborho'] 
                    # write out
                        output.write({                                 
                            'properties': school['properties'], 
                            'geometry': school['geometry']
                        })

धन्यवाद @ सेंगेल ऐसा लग रहा है कि यह मुझे सही रास्ते पर डाल देगा! मैं वास्तव में लाइनों और बहुभुज के साथ जुड़ने में रुचि रखता हूं (विशेष रूप से यह खोज कर रहा हूं कि जहां नदियां मॉडल कोशिकाओं को काटती हैं) और मुझे लगता है कि यह आपके उदाहरण पर काम करेगा।
mishaF

@cengel क्या इन तरीकों को नियोजित करने वाले प्लगइन्स का उपयोग करके qgis स्टेशनों को मॉड्यूल और गाल्ड की स्थापना की आवश्यकता है?
user25976

@ user25976 क्षमा करें, मुझे यकीन नहीं है कि मैं आपके प्रश्न को काफी समझता हूं। मेरा कोड उदाहरण एक स्टैंडअलोन अजगर स्क्रिप्ट है। फियोना और सुडौल दोनों को गदल की आवश्यकता होती है।
सेंगेल

@ Cengel Excuse me, मुझे स्पष्ट करें (मैं प्रोग्रामिंग में नया हूं)। स्टैंडअलोन पाइथन लिपियों के बारे में: आपका मतलब है कि फिओना और सुडौल आयात के साथ लिखे गए प्लगइन का उपयोग QGIS उपयोगकर्ताओं द्वारा किया जा सकता है, भले ही उनके पास अजगर या उनके कंप्यूटर पर स्थापित मॉड्यूल न हों?
user25976

@ user25976 वे अपने कंप्यूटर पर स्थापित मॉड्यूल की जरूरत है। उदाहरण के लिए यहाँ
cengel

2

हालांकि किनारों के आसपास अभी भी थोड़ा मोटा है, खासकर जब यह प्रलेखन और उदाहरणों की बात आती है, लेकिन जियोपैन्डस का भविष्य उज्ज्वल दिखता है। यह मूल रूप से आकार की भू-स्थानिक क्षमताओं के साथ पांडा डेटाफ्रेम की शक्ति को जोड़ती है।

आपके द्वारा खोजे जाने वाले फ़ंक्शन को sjoin कहा जाता है

सुनिश्चित करें कि ऑपरेशन करने के लिए आपकी मशीन / इंस्टेंस में पर्याप्त मेमोरी है

import geopandas as gpd
import pandas as pd
import os

gdfLeft = gpd.read_file(os.path.join(PATH,INPUT_FILE_NAME_1))
gdfRight = gpd.read_file(os.path.join(PATH,INPUT_FILE_NAME_2))

gdfJoined = gpd.sjoin(gdfLeft, gdfRight, how="left", op='intersects')

कोड का यह टुकड़ा स्थानिक जुड़ाव का प्रदर्शन करता है लेकिन शामिल किए गए शेपफाइल की विशेषताएं खाली है। कोई संकेत?
अप्रेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.