ST_Split एक तालिका में दूसरे में सुविधाओं के आधार पर कैसे करें?


9

मुझे पॉलीगन्स (परत 'पोल') को बंद और गैर-बंद लिनेस्टर (परत 'लिन') दोनों से विभाजित करने की आवश्यकता है।

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

दुर्भाग्य से मुझे निम्नलिखित क्वेरी चलाने के उचित परिणाम नहीं मिलते हैं।

CREATE VIEW splitted_pol AS
SELECT 
    g.path[1] as gid, 
    g.geom::geometry(polygon, SRID) as geom 
FROM
    (SELECT 
    (ST_Dump(ST_Split(pol.geom, lin.geom))).* 
    FROM pol, lin
) as g;

मेरे उदाहरण में ST_Split में छह बहुभुज (परत 'splitted_pol') बनाने चाहिए।

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें क्या कोई जानता है कि QGIS / PostGIS के साथ ST_Split का उपयोग कैसे करें?


आपको आवश्यकता होती है कि आप पुनः भूगर्भ को खिलाएं ST_Split
जैकब कानिया

क्या आप कृपया SQL क्वेरी के साथ मेरी मदद कर सकते हैं? मैं PostGIS के लिए नया हूं।
चंद्र सागर

आपके इनपुट परतों में वास्तव में क्या है? मैं एक लाल वर्ग और एक त्रिकोण बहुभुज के साथ परत 'पोल' और केवल एक गहरे नीले ऊर्ध्वाधर रेखा के साथ 'लिन' देखता हूं। और आप 6 बहुभुजों की अपेक्षा क्यों करते हैं? मैं "सीमा" को ध्यान में नहीं रखता।
स्टीफन

मैंने परतों को चित्रित करने के लिए एक स्क्रीनशॉट जोड़ा है।
चंद्र सागर

कोई भी मौका जो आप इनपुट ज्यामिति जोड़ सकते हैं?
जॉन पॉवेल

जवाबों:


4

आप कुछ इस तरह से फंक्शन बना सकते हैं:

create or replace function ST_MultiSplit(geom Geometry, blades Geometry) RETURNS Geometry AS $$
BEGIN
  FOR i IN 1..ST_NumGeometries(blades)
     LOOP
        geom = ST_Split(geom, ST_GeometryN(blades, i));
     END LOOP;
  RETURN geom;
END;
$$ LANGUAGE plpgsql;

फिर इसका उपयोग करें जैसे:

Select ST_AsEWKT(a.geom) from (
   select (ST_Dump(ST_MultiSplit(pol.geom, (
      select ST_MemUnion(lin.geom) from lin where ST_Intersects(pol.geom, lin.geom) = 't')
 ))).geom geom from pol) a;

यह आपके द्वारा अपेक्षित छह रिकॉर्ड देता है। आप कुछ त्रुटि जाँच / हैंडलिंग जोड़ना चाहते हैं और मैं स्केलेबिलिटी के बारे में निश्चित नहीं हूँ।


4

मैं JAVA में लाइन के द्वारा फीचर को विभाजित करने के लिए postGIS sql का उपयोग कर रहा हूं, और मेरे कोड ने काम किया। मेरा कोड है:

सार्वजनिक सूची स्प्लिटग्रोमेट्री (स्ट्रिंग geom1, स्ट्रिंग geom2) {

    List<String> result=new ArrayList<String>() ;
    try {

        Statement s = connection.createStatement();
        String sql_stat = null;
        sql_stat = "select st_astext (a.geom)from (select ( st_dump(p_geom)).geom as geom FROM (SELECT  st_split(ST_GeomFromEWKT('"+geom1+"') ,ST_GeomFromEWKT('"+geom2+"'))AS p_geom) AS b) AS a;";
        System.out.println(sql_stat);
        ResultSet rs=  s.executeQuery(sql_stat);
        while (rs.next()){
            result.add(rs.getString(1)) ;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result ;
}

मुझे आशा है कि आप मदद करेंगे।


आपकी मदद के लिए धन्यवाद, लेकिन मैं एक पोस्टजीआईएस केवल समाधान का पता लगाने की कोशिश कर रहा हूं क्योंकि मुझे नहीं पता कि क्यूजीआईएस को जावा से कैसे जोड़ा जाए।
चंद्र सागर

QGIS C ++ में लिखा गया है और इसमें पायथन बाइंडिंग हैं। तो आप उन भाषाओं का उपयोग करके अपने स्वयं के एप्लिकेशन विकसित कर सकते हैं। आप जावा का उपयोग नहीं कर सकते। आप पोस्टगिस की जगह उपयोग कर सकते हैं।
समाने

वहाँ किसी भी C ++ / पायथन अनुप्रयोगों के बिना PostGIS का उपयोग कर linestring सुविधाओं द्वारा बहुभुज सुविधाओं को विभाजित करने का एक तरीका है? मुझे प्रोग्रामिंग का कोई अनुभव नहीं है।
चंद्र सागर

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