2011-09-15 30 views
13

Tôi cần một thân thiện với thương mại (Giấy phép Apache, LGPL, Giấy phép Công cộng Mozilla, v.v.) Thực hiện R-tree trong Java, để thay thế Dịch vụ Web geonames cho múi giờ, như được đề xuất trong câu hỏi "Determine timezone from latitude/longitude without using web services like Geonames.org". Tôi có foundsomearound, nhưng tôi đã tự hỏi nếu ai đó đã đánh giá hoặc sử dụng chúng trong thực tế.Triển khai R-tree Java thân thiện với thương mại?

+1

Bạn có thể giải thích về những gì được chấp nhận "thân thiện với thương mại không?" – trashgod

+2

Java Topology Suite (JTS) từ các giải pháp Vivid với giấy phép LGPL chứa thực thi R-Tree. Tôi đã sử dụng thành công JTS trong các ứng dụng của mình nhưng không sử dụng JTS R-Tree. Xem http://www.vividsolutions.com/jts/javadoc/com/vividsolutions/jts/index/strtree/STRtree.html –

+2

Không trực tiếp triển khai R-tree, nhưng các phiên bản gần đây của Apache Lucene có hỗ trợ cho các tìm kiếm không gian địa lý hiệu quả. Xem ví dụ http://www.ibm.com/developerworks/opensource/library/j-spatial/ để biết thêm chi tiết. –

Trả lời

2

Trước hết hãy để tôi chỉ ra rằng nếu bạn sẽ tìm kiếm thành phố gần nhất từ ​​các tọa độ nhất định, nó có thể không nằm trong cùng múi giờ! Những gì bạn thực sự cần, theo ý kiến ​​của tôi, là một thông tin về nó liên kết hành chính - tối thiểu sẽ là một quốc gia, nhưng trong một số trường hợp nó thậm chí còn nhiều hơn thế, tức là nhà nước. Thông tin đó có thể được truy xuất bằng API Google Maps và sau đó tương quan với một số thông tin TZ chi tiết hơn.

có một giải pháp thay thế miễn phí cho GeoNames - EarthTools. Có một số hạn chế đối với bản thân dịch vụ (số yêu cầu, v.v.), nhưng nó vẫn tốt, được thử nghiệm và làm việc tốt cho tôi.

Thứ hai - có một giải pháp thay thế miễn phí cho GeoNames - EarthTools. Có một số hạn chế đối với bản thân dịch vụ (số yêu cầu, v.v.), nhưng nó vẫn tốt, được thử nghiệm và làm việc tốt cho tôi.

Thứ ba - nếu bạn quan tâm đến việc nhập dữ liệu vào DB, hầu hết các triển khai DB hiện tại sẽ cung cấp chỉ mục không gian địa lý mà bạn có thể sử dụng. Nếu bạn cần thông tin đó được nhúng trong ứng dụng của bạn, bạn có thể sử dụng H2Database (nhúng Java DB) với H2Spatial Ngoài ra - mặc dù tôi đã thử nó và tôi không thể khuyên bạn nên nó đầy đủ. Neo4j có triển khai chỉ mục không gian tuyệt vời

Ngoài ra, bạn có thể sử dụng Solr cho GeoSpatial searches. Thật tuyệt, thật nhanh chóng và dễ thực hiện. Tôi thực sự ở giữa quá trình di chuyển tìm kiếm DB của tôi để Solr ...

Cuối cùng nhưng không kém, bên dưới, bạn sẽ tìm thấy một số những cái tôi đã thử nghiệm một thời gian trở lại:

  • JSI - LGPL
  • GeoTools - LGPL, một overkill, sẽ cung cấp cho bạn nhiều hơn so với những gì bạn cần ... nhưng nó là tuyệt vời!

Có thể thêm vài đó, nhưng những cái tôi đã thử nghiệm cho đến nay ...

+0

Cảm ơn câu trả lời. Tôi tìm thấy EarthTools khi tôi đang nghiên cứu, nhưng điều làm tôi băn khoăn là "Việc sử dụng các dịch vụ này là * hiện tại * miễn phí". Đây là một stopper hiển thị cho tôi, vì tôi cần biết rằng giải pháp sẽ vẫn miễn phí vô thời hạn. –

+0

Tôi sẽ đi với Solr hoặc GeoTools sau đó - cả hai đều tuyệt vời. –

13
0

RTree đơn giản lớp Java được tạo ra bởi tôi: https://github.com/hadmir/rtree/blob/master/RTree.java

Tất cả các đối tượng được lưu trữ bên trong hai int [] mảng, vì vậy nó là rất dễ dàng để tồn tại (nộp). Ngoài ra, thực tế là việc thêm các rects mới không tạo ra bất kỳ đối tượng nào có nghĩa là bạn có thể chèn hàng triệu hình chữ nhật vào RTree và JVM sẽ không cháy trong ngọn lửa. Điều này rất hữu ích cho các dự án địa lý, nơi mà số lượng đối tượng thường rất lớn.

Chỉ hình chữ nhật 2D được lưu trữ (vì vậy, đối với đối tượng phức tạp bạn cần tìm hình chữ nhật bị ràng buộc). Truy vấn trả về tất cả các rects (IDs of rects) giao nhau hoặc chồng chéo với "hình chữ nhật truy vấn".

Các vấn đề liên quan