คำถามติดแท็ก spatial-index

ในฐานข้อมูลกลไกในการเพิ่มประสิทธิภาพการเข้าถึงข้อมูลตามคอลัมน์เชิงพื้นที่ของตารางข้อมูล

2
รับความเร็วเหมือน ArcGIS ใน Postgis
ฉันใช้ Postgis 2.0 เป็นเวลา 3/4 ของปีแล้วและในขณะที่ฉันสนุกกับการใช้งานจริง ๆ เวลาที่ใช้ในการประมวลผลแบบสอบถามที่มากเกินไปทำให้มันใช้ไม่ได้กับกรณีการใช้งานของฉัน ฉันมักจะทำการประมวลผลทางภูมิศาสตร์อย่างหนักในชุดข้อมูลเทศบาลซึ่งมักจะมีหลายหมื่นหลายพัน รูปหลายเหลี่ยมเหล่านี้บางครั้งมีรูปร่างที่ผิดปกติมากและอาจแตกต่างกันจาก 4 คะแนนเป็น 78,000 จุดต่อหลายรูปหลายเหลี่ยม ตัวอย่างเช่นเมื่อฉันตัดชุดข้อมูลพัสดุภัณฑ์ด้วยชุดข้อมูลจำนวน 329,152 ชุดโดยมีชุดเขตอำนาจศาลที่ประกอบด้วยชุดข้อมูลจำนวน 525 ชุดฉันจะได้รับสถิติต่อไปนี้สำหรับเวลาทั้งหมดที่ใช้ไป: ArcGIS 10.0 (on same host with windows 7 OS): 3 minutes Postgis:56 minutes (not including geometry pre-processing queries) กล่าวอีกนัยหนึ่งมันต้องใช้เวลาในการทำจุดตัดนี้ใน Postgis มากกว่า 1500% กว่าใน ArcGIS - และนี่คือหนึ่งในข้อความค้นหาที่เรียบง่ายของฉัน! เหตุผลหนึ่งที่ ArcGIS คาดว่าจะทำงานได้เร็วกว่านั้นก็เนื่องมาจากดัชนีที่ดีขึ้น โปรแกรมเมอร์บางคนเพิ่งรู้ว่าดัชนีเหล่านี้ทำงานอย่างไรและฉันสงสัยว่าใครรู้วิธีสร้างดัชนีเหล่านี้ใน Postgis …

3
วิธีเพิ่มความเร็วการสืบค้นสำหรับฐานข้อมูลแรสเตอร์?
ฉันมีฐานข้อมูลแรสเตอร์ใน postgresql / postgis ด้วยคอลัมน์เหล่านี้: (ID, Rast, data_of_data) 'rast'คือคอลัมน์ที่มีไฟล์แรสเตอร์ในรูปแบบ WKT ตัวอย่างแบบสอบถามเพื่อค้นหาค่า DN ของจุดในระบบ WGS84 (30.424, -1.66) และสำหรับ 2002-01-09 มีดังต่อไปนี้: SELECT st_value(rast,(st_GeomFromText('POINT(30.424 -1.66)', 4326))) as val FROM my_table WHERE date_of_data='2002-01-09' มีวิธี (เช่นดัชนีเชิงพื้นที่) เพื่อเพิ่มความเร็วของคำค้นหาเหล่านั้นหรือไม่

3
ปรับการค้นหาเพื่อนบ้านที่ใกล้เคียงที่สุดบนจุดคลาวด์ 70 ล้านจุดบน SQL Server 2008
ฉันมีระเบียนประมาณ 75 ล้านระเบียนในฐานข้อมูล SQL Server 2008 R2 Express แต่ละรายการมีความยาว lat ที่สอดคล้องกับค่าบางค่า ตารางมีคอลัมน์ภูมิศาสตร์ ฉันกำลังพยายามหาเพื่อนบ้านที่ใกล้ที่สุดหนึ่งแห่งสำหรับละติจูดลองจิจูดที่ระบุ (จุด) ฉันมีข้อความค้นหาที่มีดัชนีเชิงพื้นที่อยู่แล้ว แต่ขึ้นอยู่กับตำแหน่งที่บันทึกในฐานข้อมูลพูดในไตรมาสแรกหรือไตรมาสที่แล้วแบบสอบถามอาจใช้เวลาประมาณ 3 ถึง 30 วินาทีในการค้นหาเพื่อนบ้านที่ใกล้ที่สุด ฉันรู้สึกว่าสิ่งนี้สามารถปรับให้เหมาะสมเพื่อให้ได้ผลลัพธ์ที่รวดเร็วยิ่งขึ้นด้วยการปรับการสืบค้นหรือดัชนีเชิงพื้นที่ ตอนนี้ใช้ดัชนีอวกาศด้วยการตั้งค่าเริ่มต้น นี่คือลักษณะตารางและข้อความค้นหาของฉัน CREATE TABLE lidar( [id] [bigint] IDENTITY(1,1) NOT NULL, [POINTID] [int] NOT NULL, [GRID_CODE] [numeric](17, 8) NULL, [geom] [geography] NULL, CONSTRAINT [PK_lidar_1] PRIMARY KEY CLUSTERED ([id] ASC) WITH …

1
ประสิทธิภาพดัชนีเชิงพื้นที่ของ sql server
ฉันมีตารางที่มีประมาณ 2 ล้านบันทึกในนั้น ฉันสร้างดัชนีเชิงพื้นที่โดยใช้ค่าเริ่มต้นนอกเหนือจากกล่องขอบเขต ฉันสังเกตเห็นว่าคำค้นหาบางคำนั้นเร็วมากและบางอันก็ช้ามาก ปัจจัยที่กำหนดจะปรากฏขึ้นกับขนาดของรูปหลายเหลี่ยมที่ใช้ในแบบสอบถาม ในพื้นที่การค้นหาที่ใหญ่ขึ้นการใช้WITH(INDEX(SIX_FT5))ข้อความค้นหาจะช้าลงอย่างมาก (จาก 0 วินาทีถึง 15+ วินาที) ในพื้นที่การค้นหาขนาดเล็กตรงข้ามกับที่เป็นจริง นี่คือคำค้นหาที่ฉันทดสอบด้วย: อย่างรวดเร็ว: SELECT TOP(1000) * FROM [FT5] WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1) ช้า: SELECT TOP(1000) * FROM [FT5] WITH(INDEX(SIX_FT5)) WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, …

1
การเข้าถึงโครงสร้างข้อมูลภายในที่จัดเก็บดัชนีเชิงพื้นที่ของ Postgis (PostGres GiST)
ฉันอยากรู้ว่าโครงสร้างข้อมูลภายในและกลไกการจัดเก็บของดัชนี GiST เชิงพื้นที่ใน Postgis เป็นอย่างไร ใน Oracle ฉันเคยชอบที่จะแสดงว่าดัชนี SDO เป็น "เพียงตารางอื่น" และระดับของคุณลักษณะเป็นดัชนีและกล่องเก็บรูปทรงเรขาคณิตที่จัดทำดัชนีถูกจัดเก็บเป็น blobs (ที่สามารถแยกได้) วิธี postgis เก็บดัชนีและที่ไหน ตารางระบบhttp://www.postgresql.org/docs/8.3/static/catalogs.htmlสามารถใช้เพื่อระบุดัชนี แต่ฉันไม่ทราบวิธีเข้าถึงหน่วยเก็บข้อมูลจริง (ถ้าเป็นตารางจริง ๆ )

3
เข้าใจการใช้ดัชนีเชิงพื้นที่กับ RTree หรือไม่?
ฉันมีปัญหาในการทำความเข้าใจการใช้ดัชนีเชิงพื้นที่กับ RTree ตัวอย่าง: ฉันมี 300 คะแนนบัฟเฟอร์และฉันจำเป็นต้องรู้พื้นที่จุดตัดบัฟเฟอร์แต่ละแห่งด้วยไฟล์รูปหลายเหลี่ยม ไฟล์รูปหลายเหลี่ยมมีมากกว่า 20,000 รูป มันแนะนำให้ฉันใช้ดัชนีเชิงพื้นที่เพื่อเร่งกระบวนการ ดังนั้น ... ถ้าฉันสร้างดัชนีเชิงพื้นที่สำหรับไฟล์รูปหลายเหลี่ยมของฉันมันจะ "แนบ" กับไฟล์ในทางใดทางหนึ่งหรือดัชนีจะยืนอยู่คนเดียวหรือไม่ นั่นคือหลังจากสร้างเสร็จฉันสามารถเรียกใช้ฟังก์ชันทางแยกของฉันบนไฟล์รูปหลายเหลี่ยมและรับผลลัพธ์เร็วขึ้นได้หรือไม่ ทางแยกจะ "เห็น" ว่ามีดัชนีเชิงพื้นที่และรู้ว่าต้องทำอย่างไร? หรือฉันจำเป็นต้องเรียกใช้บนดัชนีแล้วเชื่อมโยงผลลัพธ์เหล่านั้นกลับไปยังไฟล์รูปหลายเหลี่ยมเดิมของฉันผ่านทาง FID หรือบางอย่าง เอกสาร RTree ไม่ได้ช่วยฉันมาก (อาจเป็นเพราะฉันเพิ่งเรียนรู้การเขียนโปรแกรม) พวกเขาแสดงวิธีการสร้างดัชนีโดยการอ่านในจุดที่สร้างขึ้นด้วยตนเองแล้วทำการสอบถามกับจุดที่สร้างขึ้นด้วยตนเองอื่น ๆ ซึ่งจะส่งกลับรหัสที่มีอยู่ภายในหน้าต่าง มีเหตุผล. แต่พวกเขาไม่ได้อธิบายว่ามันจะเกี่ยวข้องกับไฟล์ต้นฉบับที่ดัชนีมาจากไหน ฉันคิดว่ามันต้องเป็นอย่างนี้: ดึงกล่องสี่เหลี่ยมสำหรับคุณลักษณะรูปหลายเหลี่ยมแต่ละรูปจากแฟ้มรูปหลายเหลี่ยมของฉันและวางไว้ในดัชนีเชิงพื้นที่โดยให้รหัสที่เหมือนกันกับรหัสในรูปแบบไฟล์ ค้นหาดัชนีนั้นเพื่อรับรหัสที่ตัดกัน จากนั้นเรียกใช้จุดแยกของฉันอีกครั้งบนคุณสมบัติเฉพาะในไฟล์รูปร่างดั้งเดิมที่ระบุโดยการสืบค้นดัชนีของฉัน (ไม่แน่ใจว่าฉันจะทำส่วนสุดท้ายนี้อย่างไร) ฉันมีความคิดที่ถูกต้องหรือไม่? ฉันไม่มีอะไรเลยหรือ ตอนนี้ฉันกำลังพยายามทำให้โค้ดนี้ทำงานบนหนึ่งไฟล์ shapefile ที่มีคุณสมบัติจุดเดียวเท่านั้นและหนึ่งไฟล์รูปหลายเหลี่ยมที่มี> 20,000 รูปหลายเหลี่ยมคุณสมบัติ ฉันกำลังนำเข้า Shapefiles โดยใช้ Fiona เพิ่มดัชนีอวกาศโดยใช้ RTree และพยายามทำจุดตัดโดยใช้ …

3
ประสิทธิภาพแย่เมื่อใช้ดัชนีเชิงพื้นที่ใน MySQL
โพสต์คำถามใหม่ที่ถามใน Stack Overflow เมื่อมีคนแนะนำว่านี่จะเป็นฟอรัมที่ดี ฉันพยายามทดลองเล็ก ๆ น้อย ๆ ในการผลักดันชุดข้อมูลที่ไม่ใช่เชิงพื้นที่ แต่พอดีกับมันค่อนข้างดีและฉันกำลังค้นหาผลลัพธ์ที่ค่อนข้างไม่มั่นคง ชุดข้อมูลเป็นข้อมูลจีโนมเช่นจีโนมมนุษย์ที่เรามีภูมิภาคของดีเอ็นเอที่องค์ประกอบเช่นยีนครอบครองพิกัดเริ่มต้นและหยุดที่เฉพาะเจาะจง (แกน X ของเรา) เรามีหลายภูมิภาคของดีเอ็นเอ (โครโมโซม) ซึ่งครอบครองแกน Y เป้าหมายคือนำกลับรายการทั้งหมดที่ตัดกันสองพิกัด X ตามพิกัด Y เดียวเช่น LineString (เริ่ม 1, สิ้นสุด 2) ทฤษฎีนี้ฟังดูดีดังนั้นฉันจึงผลักมันเข้าไปในโปรเจกต์จีโนมจาก MySQL ที่มีอยู่และสร้างโครงสร้างตารางเช่น: CREATE TABLE `spatial_feature` ( `spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `external_id` int(10) unsigned NOT NULL, `external_type` int(3) unsigned NOT …

5
เร่งความเร็วการสืบค้น OpenStreetMap PostGIS
ผมมีข้อมูล OpenStreetMap เนเธอร์แลนด์โหลดลงในฐานข้อมูล PostGIS (PostgreSQL 8.3 / PostGIS 1.3.3) โดยใช้สคีออสโมซิ ซึ่งหมายความว่าแท็กทั้งหมดจะถูกเก็บไว้ในฟิลด์hstore นอกจากดัชนี GIST ที่ออสโมซิสสร้างขึ้นในฟิลด์เรขาคณิตฉันได้สร้างดัชนี GIST เพิ่มเติมในฟิลด์แท็ก พยายามค้นหาโดยใช้ทั้งข้อ จำกัด เชิงพื้นที่และข้อ จำกัด ในฟิลด์แท็กฉันพบว่าช้ากว่าที่ฉันต้องการ แบบสอบถามแบบนี้: SELECT n.geom,n.tags,n.tstamp,u.name FROM nodes AS n INNER JOIN users AS u ON n.user_id = u.id WHERE tags->'man_made'='surveillance' AND ST_Within(geom, ST_GeomFromText('POLYGON((4.0 52.0,5.0 52.0,5.0 53.0,4.0 53.0,4.0 52.0))',4326)); ใช้เวลา 22 วินาทีในการส่งคืน …

2
ST_ ระยะทางไม่ได้ใช้ดัชนีสำหรับการสืบค้นเชิงพื้นที่
ฉันไม่สามารถให้ PostGIS 2.1 ทำงานบน PostgreSQL 9.3.5 เพื่อใช้ดัชนีเชิงพื้นที่ได้แม้จะเป็นการสืบค้นที่ง่ายที่สุด ชุดข้อมูลทั้งหมดเป็น 8 ล้านคะแนน (จำนวนประชากรตารางจากที่นี่) ตารางถูกสร้างขึ้นเป็น CREATE TABLE points ( population DOUBLE PRECISION NOT NULL, location GEOGRAPHY(4326, POINT) NOT NULL ) CREATE INDEX points_gix ON points USING GIST(location); การสืบค้นนั้นง่ายมากตามที่ได้รับ SELECT SUM(population) FROM points WHERE ST_Distance( location, ST_GeographyFromText('SRID=4326; POINT(0 0)') ) < 1000 PostgreSQL ใช้การสแกน …

1
กำลังบันทึกดัชนีเชิงพื้นที่ใน QGIS API หรือไม่
ฉันกำลังพยายามสร้างดัชนีเชิงพื้นที่สำหรับรูปร่างบางไฟล์โดยใช้ Qgis API ฉันได้ทำตามขั้นตอนที่อธิบายไว้ในบล็อกของ Nathan Woodrow ( https://nathanw.net/2013/01/04/using-a-qgis-spatial-index-to-speed-up-your-code/ ) และใช้งานได้ดี : layer = QgsVectorLayer(path, name, 'ogr') idx = QgsSpatialIndex() all_features = layer.getFeatures() map(idx.insertFeature, all_features) ปัญหาของฉันคือฉันไม่มีไฟล์ที่เป็นผลลัพธ์ (.qix? .sbn? .sbx?) ฉันจะบันทึกดัชนีเชิงพื้นที่นี้เพื่อให้ผู้ใช้ในอนาคตของรูปร่างไฟล์ได้ประโยชน์จากมันได้อย่างไร

4
จะเข้าถึงฟีเจอร์ที่ส่งคืนโดย QgsSpatialIndex อย่างมีประสิทธิภาพได้อย่างไร
PyQGIS ตำราอธิบายถึงวิธีการตั้งค่าดัชนีเชิงพื้นที่ แต่เพียงอธิบายถึงครึ่งหนึ่งของการใช้งาน: สร้างดัชนีเชิงพื้นที่ - รหัสต่อไปนี้สร้างดัชนีที่ว่างเปล่า index = QgsSpatialIndex() เพิ่มคุณสมบัติในการทำดัชนี - ดัชนีใช้วัตถุ QgsFeature และเพิ่มลงในโครงสร้างข้อมูลภายใน คุณสามารถสร้างวัตถุด้วยตนเองหรือใช้จากการเรียกไปยังคุณลักษณะถัดไปของผู้ให้บริการ () index.insertFeature(feat) เมื่อดัชนีเชิงพื้นที่เต็มไปด้วยค่าบางอย่างคุณสามารถทำแบบสอบถามได้ # returns array of feature IDs of five nearest features nearest = index.nearestNeighbor(QgsPoint(25.4, 12.7), 5) ขั้นตอนที่มีประสิทธิภาพมากที่สุดในการรับคุณลักษณะจริงที่เป็นของรหัสคุณลักษณะที่ส่งคืนคืออะไร

3
สร้างดัชนีเชิงพื้นที่ใน PostGIS บน Schema ทั้งหมด
ฉันโหลด Shapefiles จำนวนหนึ่งโดยใช้ SPIT (ปลั๊กอิน QGIS) ไปยังฐานข้อมูล PostGIS ของฉัน เลเยอร์เหล่านี้ไม่มีดัชนีเชิงพื้นที่ที่สร้างขึ้นเมื่อโหลด ฉันสงสัยว่ามีวิธีสร้างดัชนีเชิงพื้นที่สำหรับแต่ละชั้นในสคีมาโดยไม่ต้องเขียนแบบสอบถามสำหรับแต่ละชั้นหรือไม่ ฉันไม่ได้เป็นนักเขียนสคริปต์ PostGIS ที่ดีดังนั้นความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก ขอบคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.