Tôi sử dụng "quy tắc ngón tay cái" trực quan của mình ... Thật hữu ích cho một quyết định nhanh chóng,
Giới thiệu về cơ sở dữ liệu của bạn : nếu các tính năng và / hoặc phân tích không gian có quy mô lục địa và cần độ chính xác (các ứng dụng nghiêm trọng) sử dụng địa lý . Khác sử dụng hình học: khi tất cả các cơ sở dữ liệu là về cùng một khu vực ( quy mô thành phố ) hoặc bạn không cần độ chính xác, vv bạn chỉ cần hình học.
Xem quy tắc tương tự tại bài giảng gợi ý của @underdark .
Về nhu cầu của bạn về mặt CÂN B PERNG THỰC HIỆN / CHÍNH XÁC : hình học nhanh hơn; nếu bạn cần hiệu suất và suy nghĩ để sử dụng địa lý, trước tiên hãy làm điểm chuẩn của bạn.
Ý chính
Trên trang này, chúng tôi thấy một số từ khóa và trọng tâm của một số khái niệm: độ chính xác , hiệu suất và một cái gì đó như tính linh hoạt / hàng hóa sử dụng .
Như những người khác nhớ, sự khác biệt, đối với việc lưu trữ và tính toán, là việc sử dụng hình cầu trong địa lý và mặt phẳng trong hình học:
- hình cầu (địa lý) là tốt hơn, chính xác hơn. Xem ví dụ Los Angeles / Paris .
- sự phát triển của địa lý: như @DavidF nói, "loại địa lý được thêm vào gần đây, do đó, ít chức năng được hỗ trợ / thực hiện hơn".
Có lẽ vào năm 2020, tất cả các cơ sở dữ liệu GIS sẽ được đặt thành cùng một SRID / EPSG tiêu chuẩn (tương đương với mã 4326 hiện nay, cho WGS84). Ngày nay, địa lý không phải là một lựa chọn mặc định vì những hạn chế về hiệu suất và chức năng.
Thảo luận
Theo tôi đó là một câu hỏi về "thực tiễn tốt nhất", không phải là một vấn đề kỹ thuật / lý thuyết sâu sắc.
Độ chính xác
Sau khi ước tính lỗi trên dữ liệu của bạn, hãy kiểm tra và so sánh kết quả: mức tăng chính xác với địa lý có cao hơn lỗi dữ liệu không? Hàm ST_Distance (với bộ tổng hợp MAX và AVG ) là tham chiếu chính trong loại thử nghiệm này.
Hiệu suất
Ví dụ về điểm chuẩn trong khu vực đô thị ~ 100km2 (đường kính ~ 11km), tất cả được lưu trữ dưới dạng hình học, trong hệ tọa độ UTM phẳng. LƯU Ý: bắt đầu với chuyển đổi hình học / địa lý được sử dụng thường xuyên - thường xuyên vì một số chức năng không tồn tại và một số chức năng khác, như ST_Buffer và ST_Intersection, thực hiện chuyển đổi bên trong.
Băng ghế số 1: một bảng có ~ 87000 đa giác đại diện cho các lô đô thị, mỗi bảng có poly với (avg) ~ 13 điểm,
BEGIN; EXPLAIN ANALYSE CREATE TABLE temp_geom AS
SELECT gid, the_geom FROM urbanlots; ROLLBACK;
-- time 2080 ms ~ 2.0 s
BEGIN; EXPLAIN ANALYSE CREATE TABLE temp_geog AS
SELECT gid, Geography(ST_Transform(the_geom,4326)) AS geog
FROM urbanlots; ROLLBACK;
-- time 12374 ms ~ 12.4 s ~ 6 * geometry.
vì vậy, geography_time = 6 * hình học_time.
Cuốn số 2: một bảng có ~ 3500 đa giác đại diện cho các khối đô thị, mỗi bảng có poly với (avg) ~ 50 điểm: 0,6s so với 2,7 giây, geography_time = 4,5 * hình học_time .
Băng ghế số 3: ~ 10000 đường đại diện cho đường phố đô thị, mỗi đường có ~ 5 điểm. ~ 0,87s so với ~ 0,36s, địa lý_time = 2,4 * hình học_time .
Quay lại Cuốn số 2, tạo các bảng và thực hiện các truy vấn,
EXPLAIN ANALYSE SELECT ST_Area(g.the_geom)+ST_Distance(g.the_geom,t.the_geom)
FROM temp_geom g, (SELECT the_geom FROM temp_geom WHERE gid=1) as t;
-- time 182 ms ~ 0.2 s
EXPLAIN ANALYSE SELECT ST_Area(g.geog)+ST_Distance(g.geog,t.geog)
FROM temp_geog g, (SELECT geog FROM temp_geog WHERE gid=1) as t;
-- time 58657 ms ~ 59 s ~ 300*geometry
-- curioselly for only distances, geography=4*geometry
Kết luận: đối với các nhiệm vụ nhỏ và nhận thức tốt, thời gian hội tụ đến "cùng thời gian chấp nhận được", nhưng đối với các nhiệm vụ lớn, có xếp hạng hiệu suất để xem xét.
Linh hoạt / Hàng hóa
Trên các điểm chuẩn tôi thực hiện một nhiệm vụ hàng ngày, kiểm tra số điểm (theo ST_NPoints
) ... Đó là một ví dụ về hoạt động không tồn tại cho địa lý, cần diễn viên. "Diễn viên địa lý / hình học" là một nhiệm vụ khó chịu cho các lập trình viên, thạc sĩ, v.v.
Khi sử dụng lại các thư viện của các hàm SQL và PL / pgQuery, địa lý cần có sự thích ứng. Và, nếu bạn muốn tối ưu hóa mã hoặc tránh các vấn đề chính xác với nhiều chuyển đổi trung gian, việc không có một bộ chức năng tích hợp hoàn chỉnh, với địa lý, là một vấn đề khác. Chương trình cho địa lý, không phải là một nhiệm vụ dễ dàng.
Chỉ xử lý, trao đổi dữ liệu, vv
Đối với nhu cầu không thông thường, không có người dùng chuyên sâu như Mapserver, khi công việc duy nhất (PostGIS) của bạn là xử lý dữ liệu đầu vào và trả lại bất cứ lúc nào (như giờ hoặc ngày) dữ liệu đã xử lý, quy tắc ngón tay cái là "sử dụng địa lý nếu bạn thoải mái! " (xem "Linh hoạt / Hàng hóa" ở trên). Nếu không, hãy kiểm tra các quy tắc thông thường.
LƯU Ý: tất nhiên, nếu tác vụ (không thông thường) của bạn chỉ hiển thị dữ liệu từ PostGIS sang Mapserver, không cần xử lý, để giữ nguyên (hình học hoặc địa lý) của dữ liệu đầu vào của bạn, là quyết định tốt hơn.
Tôi tin rằng tập trung dữ liệu là một nhiệm vụ khác trong đó địa lý tốt hơn: trong bối cảnh sự đa dạng của các định dạng đầu vào và hệ thống tham chiếu là thông thường, việc sử dụng một tiêu chuẩn, như được thi hành bởi địa lý, có lợi ... Công ước về cấu hình là một nguyên tắc tốt khi tập trung hóa và trao đổi dữ liệu là trọng tâm kinh doanh (xem Google Maps!).