Tôi cố gắng để giải quyết vấn đề của việc tìm kiếm những người hàng xóm n gần bằng PostGIS:Tìm n Hàng xóm gần nhất cho điểm đã cho bằng cách sử dụng PostGIS?
Starting Point:
- Bảng geoname với geonames (từ geonames.org) chứa vĩ độ/kinh độ (WSG- 84)
- thêm Geom GeometryColumn với SRID = 4326 và datatype = POINT
- Đầy Geom với các giá trị: UPDATE geoname SET Geom = ST_Se tSRID (ST_Point (kinh độ, vĩ độ), 4326);
- Tạo index GIST cho Geom (CREATE INDEX geom_index ON geoname SỬ DỤNG GIST (Geom);)/Clustered geom_index: CỤM geom_index ON geoname;)
- Created PRIMARY KEY chỉ số UNIQUE BTREE cho geonameid
vấn đề: Tìm n (ví dụ 5) hàng xóm gần nhất để một điểm được đưa ra trong bảng geoname đại diện bởi id (geoname.geonameid
có thể giải pháp:.
Lấy cảm hứng từ http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_nearest_neighbor, tôi đã thử truy vấn sau đây: Thời gian
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid " +
"AND ST_DWithin(start.geom, ende.geom, 300) order by distance limit 5"
chế biến: khoảng 60
Cũng đã cố gắng một cách tiếp cận dựa trên MỞ RỘNG:
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid AND expand(start.geom, 300) && ende.geom " +
"order by distance limit 5"
Thời gian xử lý: khoảng 120s
Ứng dụng dự định là một số loại tự động hoàn thành. Vì vậy, bất kỳ cách tiếp cận nào lâu hơn> 1s đều không được áp dụng. Nói chung có thể đạt được thời gian phản hồi của < 1s với PostGIS không?
Tôi nghĩ bạn có cơ hội tốt hơn tại http://gis.stackexchange.com/ để nhận câu trả lời. –