tìm nhà trong bán kính


10

Trong một cuộc phỏng vấn tôi đã hỏi được những điều sau đây: Một ứng dụng bất động sản đó liệt kê tất cả nhà hiện đang có trên thị trường (ví dụ, để bán) trong một khoảng cách nhất định (nói ví dụ như người dùng muốn tìm tất cả các ngôi nhà trong vòng 20 dặm), Làm thế nào bạn sẽ thiết kế ứng dụng của bạn (cả cấu trúc dữ liệu và alogirithm) để xây dựng loại dịch vụ này?

Có ý kiến ​​gì không? Làm thế nào bạn sẽ thực hiện nó? Tôi nói với anh ấy rằng tôi không biết vì tôi chưa bao giờ thực hiện bất kỳ công cụ liên quan đến địa lý nào trước đây.

Câu trả lời:


6

Có lẽ họ sau một câu trả lời đề cập đến việc lập chỉ mục không gian , rất có thể bằng cách chọn một cơ sở dữ liệu cung cấp chỉ mục không gian ngoài hộp , nhưng bạn cũng có thể nhận được một vài điểm bằng cách đề cập đến nó có thể được thực hiện trong chính ứng dụng nếu cần, ví dụ như bằng cách thực hiện R -Tree (có thể hữu ích nếu lựa chọn DB được cố định vì những lý do khác? Nhưng cũng cho thấy bạn biết cơ sở dữ liệu không gian hoạt động như thế nào). Lập chỉ mục không gian sẽ cho phép bạn nhanh chóng có được một tập hợp các vị trí phù hợp bên trong hộp tìm kiếm, bạn có thể tinh chỉnh điều này hơn nữa bằng cách tính khoảng cách thực tế (nếu cần, tất nhiên hình chữ nhật có thể đủ tốt) cho mỗi người để tìm kiếm đúng hình tròn / hình elip

Cho rằng khoảng cách có thể là 20M hoặc ít hơn, có lẽ bạn sẽ ổn khi giả sử trái đất phẳng để tính khoảng cách mặc dù bạn sẽ bắt đầu thấy các lỗi đáng chú ý ở đầu 20M, nếu cần chính xác phạm vi lớn hơn, bạn cũng cần bắt đầu nhìn vào các mô hình khoảng cách tốt hơn cho toàn cầu, ví dụ như khoảng cách Haversine

tất nhiên còn có vô số chi tiết khác có thể được thảo luận, ví dụ như thiết kế UI, lược đồ DB có thể là toàn bộ chủ đề theo cách riêng của họ


Tại 20 dặm, các lỗi do một mô hình trái đất bằng phẳng sẽ là không đáng kể. Dù sao, khi người dùng muốn nhìn thấy một danh sách các nhà trong vòng 20 dặm của văn phòng của ông, ông không quan tâm nếu một ngôi nhà mà là 20 dặm và 10 yards đi được bao gồm trong các kết quả.
kevin cline

1
thực vậy, và nếu một vài thông tin sai không quan trọng thì bạn cũng có thể bỏ qua việc tính toán khoảng cách thực tế hoàn toàn và chỉ trả lại MBR
jk.

Một điều tôi tò mò về: với số lượng lớn các ngôi nhà được bán, các công ty (như Zillo có thể không?) Lưu trữ tất cả trong một db và chỉ cần tiếp tục chọn từ nó? Tôi tưởng tượng rằng đó sẽ là một cú hích hiệu suất lớn và sẽ nhanh hơn nhiều khi lưu trữ tất cả trong bộ nhớ với biểu diễn đồ thị - có thể là danh sách ma trận hoặc kề và sử dụng thuật toán khoảng cách để tìm nhà gần nhất. Bạn nghĩ sao?
paul smith

@paulsmith Tôi không biết, nhưng tôi nghi ngờ rằng nó nằm trong DB không gian, DB không gian có thể sẽ sử dụng biểu diễn bên trong dù sao (rất có thể là R-Tree như đã thảo luận, nhưng có các tùy chọn khác) chỉ có thể chọn các mục trong một hình chữ nhật giới hạn tối thiểu ở vị trí đầu tiên
jk.

8

Bất cứ khi nào bạn phải đối mặt với một câu hỏi như thế này và đơn giản là bạn không có chuyên môn trong lĩnh vực vấn đề, thật tốt khi làm một vài điều.

Trước tiên, xác nhận rằng bạn không có chuyên môn cụ thể trong lĩnh vực vấn đề này.

Thứ hai , giải thích cách bạn sẽ giải quyết vấn đề.

Mặc dù tôi không có kinh nghiệm cụ thể khi làm việc với tìm kiếm địa lý nhưng tôi tin chắc rằng có các thuật toán được ghi chép tốt và các công nghệ hiện có để giải quyết vấn đề. Tôi sẽ khám phá những điều này để có được kiến ​​thức về các giải pháp phổ biến có sẵn cho tôi và đưa ra lựa chọn về việc thực hiện dựa trên các yêu cầu của dự án.

Thứ ba , Luôn giảm các vấn đề như thế này xuống các thành phần cơ bản của chúng. Bạn biết rằng các vị trí trên bản đồ được phân bổ 2 chiều. Bạn biết rằng nếu bạn được cung cấp tùy ý x, y tọa độ khoảng cách đến mỗi tọa độ từ tọa độ khác được tính bằng cách tạo một tam giác và giải cho độ dài không xác định. Bạn hy vọng cũng biết rằng nếu bạn được yêu cầu tìm tất cả các tọa độ trong một khung giới hạn, bạn có thể thực hiện việc này chỉ bằng cách tính các phạm vi của hộp bạn muốn tìm và sử dụng đơn giản lớn hơn, nhỏ hơn logic dọc theo cả hai trục.

Cuối cùng , tôi chưa bao giờ thuê một nhà phát triển dường như từ bỏ các câu hỏi. Nếu tôi hỏi một câu hỏi và người đó nói "Tôi không biết" và thậm chí không cố gắng suy nghĩ bằng lời nói thì nó mang lại cho tôi ấn tượng họ sẽ không đóng góp cho các phiên động não - điều rất quan trọng tại các tổ chức đang viết phần mềm .


tất cả lời khuyên tốt
jk.

@Ben, tôi hoàn toàn đồng ý với tất cả những điều bạn đã đề cập, tuy nhiên vì người phỏng vấn đã nói một cách dứt khoát trước khi phiên bắt đầu mà nói rằng bạn không biết, tôi chỉ làm theo hướng dẫn của anh ấy và nói với anh ấy rằng tôi không biết: )
paul smith

4

Điều này có thể rõ ràng, nhưng đối với nhiều ứng dụng, giải pháp chậm của người nghèo có thể ổn.

Có một bảng trong cơ sở dữ liệu quan hệ lưu trữ vĩ độ và kinh độ. Truy vấn cho tất cả các địa điểm có một vĩ độ trong vòng 20 dặm và một kinh độ trong vòng 20 dặm. Điều này cung cấp cho bạn một hình chữ nhật giới hạn kích thước của hình chữ nhật giới hạn nhỏ nhất chứa bán kính mà bạn thực sự muốn tìm kiếm (và cũng bỏ qua độ cong của trái đất).

Sau đó, bạn lấy tập hợp được trả về (bằng một truy vấn sử dụng chỉ mục) và lọc nó xuống bằng cách sử dụng phép tính chính xác về khoảng cách.

Vì vậy, hiệu suất không hiệu quả, nhưng rất hiệu quả trong thời gian để phát triển. Đối với nhiều ứng dụng có thể là một lựa chọn tốt hơn.


2

Cách dễ nhất có thể là sử dụng một hình tứ giác để lưu trữ các vị trí của ngôi nhà của bạn, giả sử được phân phối trong một cảnh quan 2D. Tìm kiếm nên khá đơn giản.

Nếu bạn đang sử dụng RDBMS hỗ trợ GIS để lưu trữ nội dung của mình, thì bạn thực sự không cần phải lo lắng về điều đó. Xem câu hỏi này để biết một số thông tin về hiệu suất của các cầu thủ dẫn đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.