পোস্টগিস - একটি বহুভুজ এক্সট্রুড


11

আমি সিডো 3 ডি এফেক্ট তৈরি করতে পোস্টগিসে বহুভুজ আকৃতিটি বের করতে চাই। এ লক্ষ্যে আমি এটি অর্জনের জন্য একটি অশোধিত ফাংশন লিখেছি। এটি অত্যন্ত পরীক্ষার কোড এবং এটি বহুভুজের প্রতিটি পয়েন্টের জন্য একটি নতুন ওয়াই অনুভূমিক তৈরি করে এবং তারপর মূল বিন্দুতে ফিরে এটি বন্ধ করে দেয়: -

CREATE OR REPLACE FUNCTION public.extrude_polygon(wkb_geometry_param geometry, height integer, simplify boolean DEFAULT false)
  RETURNS geometry AS
 $BODY$
DECLARE
f int;
ret_geom geometry;
wkb_geometry geometry;
BEGIN

--convert polygon to linestring
IF ST_GeometryType(wkb_geometry_param) != 'ST_Polygon' THEN 
    RETURN NULL;
END IF;

IF simplify THEN
    wkb_geometry =         ST_Simplify(ST_Transform(ST_Exteriorring(wkb_geometry_param), 27700), 0.5);
ELSE
wkb_geometry = ST_Transform(ST_Exteriorring(wkb_geometry_param), 27700);
END IF;

--initialise output geometry
ret_geom =ST_MakeLine(ST_PointN(wkb_geometry,1),ST_PointN(wkb_geometry,1));

--Move first point to up

SELECT ST_AddPoint(ret_geom,
      ST_MakePoint(ST_X(ST_PointN(wkb_geometry, 1)), 
                   ST_Y(ST_PointN(wkb_geometry, 1)) + height)
) into ret_geom;

FOR f IN 1..ST_NPoints(wkb_geometry) LOOP
    IF f < ST_NPoints(wkb_geometry) THEN
    --across to next high point
    SELECT ST_AddPoint(ret_geom,
               ST_MakePoint(ST_X(ST_PointN(wkb_geometry, f + 1)), 
               ST_Y(ST_PointN(wkb_geometry, f + 1)) + height)
    ) into ret_geom;
    --down to next point
    SELECT ST_AddPoint(ret_geom, ST_PointN(wkb_geometry,f + 1)) into ret_geom;
    --back to last point
    SELECT  ST_AddPoint(ret_geom, ST_PointN(wkb_geometry,f)) into ret_geom;
    --back then up again
    SELECT ST_AddPoint(ret_geom, ST_PointN(wkb_geometry,f + 1)) into ret_geom;
    SELECT ST_AddPoint(ret_geom,
               ST_MakePoint(ST_X(ST_PointN(wkb_geometry, f + 1)), 
               ST_Y(ST_PointN(wkb_geometry, f + 1)) + height)
    ) into ret_geom;
ELSE
    --across to first high point
    SELECT ST_AddPoint(ret_geom,
               ST_MakePoint(ST_X(ST_PointN(wkb_geometry, 1)), 
               ST_Y(ST_PointN(wkb_geometry, 1)) + height)
           ) into ret_geom;

    SELECT ST_AddPoint(ret_geom, ST_PointN(wkb_geometry,1)) into ret_geom;

END IF;
END LOOP;

RETURN ST_Buffer(ST_Buffer(ST_MakePolygon(ret_geom),10), -10);


END;

$BODY$
  LANGUAGE plpgsql

এটি সাধারণ বহুভুজের সাথে কাজ করে তবে অভ্যন্তরের রিংগুলির সাথে সমস্যা রয়েছে তবে মূল সমস্যাটি এটি হ'ল ধীর। আমার ফলস্বরূপ আকৃতিটি বহুভুজ হিসাবে আউটপুট করা দরকার যা শেপ করে ম্যাপসভারে রেন্ডার করা যায়। সুতরাং বাফার অপারেশনগুলি শেষে যা কেবলমাত্র এটির রূপরেখায় আকৃতি হ্রাস করার বিষয়ে আমি জানি।

শেষ ফলাফলটি মূল বহিরাগতকে উপস্থাপন করে একটি বাহ্যিক আকার হবে। আমি তখন একই বহির্মুখ দূরত্বের মাধ্যমে মূল বহুভুজটি অফসেট করতে পারি এবং ছাদটি তৈরি করতে শীর্ষে রাখতে পারি। এখানে চিত্র বর্ণনা লিখুন

আমি Postgis-2.1.1 এ ST_Extrude ফাংশনটি ব্যবহার করে বিবেচনা করেছি তবে এটি একটি ST_PolyhedralSurface প্রকার তৈরি করে এবং আমি এটি মানচিত্রের মধ্যে রেন্ডার করতে সক্ষম নই। যতদূর আমি বলতে পারি এটির একটি রূপরেখা তৈরি করার কোনও উপায় নেই কারণ ST_Buffer ST_polyhedralsurfaces এর সাথে কাজ করে না।

সুতরাং, আমার প্রশ্নটি হল, আমার ফাংশনটি আরও উন্নত করা যায়? বা আরও ভাল পদ্ধতির আছে। আউটপুটটি ডায়াগ্রাম অনুযায়ী দেখতে হবে যা আমি আমার বাহ্য আকারের উপর অফসেট বহুভুজ স্থাপন করে তৈরি করেছি।


দুর্দান্ত প্রশ্ন! আপনার এক্সট্রুশন সহ আরও স্বাচ্ছন্দ্য এবং নমনীয়তার জন্য আপনি সম্ভবত কেএমএল হিসাবে আপনার ডেটা আউটপুট দিতে পারবেন? এখানে কিছু শুরুর পয়েন্ট রয়েছে: postgis.net/docs/ST_AsKML.html , Code.google.com/p/postexperiments/wiki/… , gdal.org/drv_libkML.html
ব্রেন্ট এডওয়ার্ডস

উত্তর:


3

চেনাশোনাগুলির মতো খুব সাধারণ বহুভুজগুলির জন্য একটি দ্রুত সমাধান। 2 টি ভিন্ন টেবিলের ফলাফল যা সঠিক দিকে রেন্ডার করতে হবে।

polyইনপুট বহুভুজ (গুলি) সহ টেবিল

poly_prjপ্রস্তাবিত পয়েন্ট থেকে বহুভুজ সঙ্গে টেবিল

WITH points AS (
  SELECT (ST_DumpPoints(geom)).geom AS geom 
FROM poly
  SELECT 
    ST_MakePolygon(
      ST_MakeLine(
        ST_Project(geom, 5000, radians(0.0))::geometry)) AS geom 
  FROM points;

cvx2 বৈশিষ্ট্যগুলির উত্তল হাল দিয়ে টেবিল ।

ছক poly_prjটেবিলের উপরে হতে হয়েছে cvx

এর পরে আপনি কিউজিআইএস ২.১০ এ নতুন ফিল বিকল্পগুলি খেলতে পারেন!

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

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