สร้างคะแนนตามระยะทางที่กำหนดจากกันและกันในเซลล์ของแหอวนแบบสุ่มในขณะที่อยู่บน linestrings


10

เรามีโปรโตคอลที่ดินที่เราได้รับแหอวนของเซลล์ 1x1 กม. เซลล์บางส่วนได้รับการสุ่มเลือก เราต้องใส่ 4 คะแนนในแต่ละเซลล์และคะแนนเหล่านี้จะต้องอยู่บนถนนด้วย ระยะห่างต่ำสุดระหว่างจุดต้องมี 500m สำหรับทุก ๆ จุดของทุกเซลล์หากเป็นไปได้หรือหากไม่ใช่เราต้องการระยะทางที่เป็นไปได้สูงสุด

ในการทดลองครั้งแรกเราแบ่งทุกเซลล์ในสี่เซลล์ 500x500 m ด้วยST_CreateFishnetจากนั้นเราวางจุดที่ centroid ของเซลล์ย่อยแล้วบนถนนที่ใกล้ที่สุด (ST_ClosestPoint) เราได้รับผลลัพธ์ที่ดี แต่ในตัวอย่างด้านล่างคุณสามารถเห็นจุดที่ 5 อยู่ใกล้เกินไปจาก 6 และสามารถเคลื่อนย้ายบนถนนด้านซ้าย

WITH
r1 AS (         -- only sub-cells which intersects random cells
    SELECT id_maille, ROW_NUMBER() OVER() AS id_grille, fishnet_500.geomgrille
    FROM fishnet_500
        JOIN t_mailles
            ON ST_Intersects(ST_Buffer(t_mailles.geom,-200), fishnet_500.geomgrille)     -- buffer < 0 to not select neightbours
)
,
r2 AS (         -- cut roads in every cells
SELECT id_maille, id_grille, ST_Intersection((ST_Dump(roads.geom)).geom, r1.geomgrille) as geomroute
FROM roads
    JOIN r1
        ON ST_Intersects(roads.geom, r1.geomgrille)
)
                -- select point on each road the closest to cell centroid
SELECT r2.id_maille, r2.id_grille, ST_ClosestPoint(ST_Union(r2.geomroute),ST_Centroid(r1.geomgrille)) as geomipa
FROM r2
    JOIN r1
        ON r2.id_grille = r1.id_grille
GROUP BY r2.id_maille, r2.id_grille, r1.geomgrille
ORDER BY r2.id_maille, r2.id_grille

หากคุณต้องการที่จะให้มันลองผมใส่ 3 ชั้น (ตาข่ายกับเซลล์สุ่มย่อย fisnet และถนน) ในที่เก็บที่คุณสามารถหาที่นี่

ฉันเดาว่าเราไม่สามารถหลีกเลี่ยงอัลกอริทึมแบบเรียกซ้ำที่พยายามเป็นไปได้มากมาย แต่ฉันไม่แน่ใจ

ป้อนคำอธิบายรูปภาพที่นี่


คุณสามารถแชร์รหัสที่คุณใช้ไปได้หรือไม่
กุสเซน

มีข้อ จำกัด อื่น ๆ อีกไหม? มันจะทำให้ง่ายขึ้นตัวอย่างเช่นเมื่อเริ่มต้นด้วยจุดที่มุมที่ไกลที่สุดของเซลล์ย่อยทำให้มีโอกาสน้อยกว่าที่คุณจะต้องทิ้งประเด็นอื่นที่อยู่ใกล้เกินไปหรือไม่
Simbamangu

ใช่มันเป็นการดีที่จะเริ่มต้นด้วยจุดที่เป็นมุมเมื่อไม่มีเซลล์อื่น ๆ สัมผัสกับเซลล์ที่มุมที่พิจารณา คะแนนจะต้องอยู่ในระยะทางต่ำสุดจากกันบนกริดทั้งหมด
Nicolas Boisteault

คำตอบ:


1

คุณยินดีที่จะทำเช่นนี้ใน R หรือหลามโดยการเชื่อมโยงไปยังฐานข้อมูล PostGIS ของคุณ? หากคุณใช้ ST_DumpPoints ในทุกบรรทัดในแต่ละเซลล์ 1x1 กม. คุณควรใช้อัลกอริทึมที่มีอยู่จำนวนมากเพื่อเลือก 4 คะแนนโดยมีระยะห่างระหว่างแต่ละ> 500m หรือห่างกันมากที่สุด

บางทีหนึ่งในอัลกอริทึมที่กล่าวถึงใน Wikipedia สำหรับปัญหาเป้หลังhttps://en.wikipedia.org/wiki/Knapsack_problemจะให้ความคิด หรือฉันคิดว่าอัลกอริทึม MCMC จะทำงานได้ดี

หากกริดสองอันติดต่อกันระยะห่างระหว่างจุดในกริดที่อยู่ติดกันนั้นสำคัญหรือไม่


เพื่อตอบคำถามสุดท้ายของคุณ ใช่ดังที่ได้กล่าวไว้ในความคิดเห็นล่าสุดของฉัน: "คะแนนจะต้องอยู่ในระยะทางที่ต่ำที่สุดจากกันบนตารางทั้งหมด" ขอขอบคุณสำหรับความช่วยเหลือของคุณ.
Nicolas Boisteault
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.