Khảo sát gói thư viện mã nguồn mở Geotools và ứng dụng hiện thực hệ thống thông tin địa lý trên nền Web



tải về 5.55 Mb.
trang26/34
Chuyển đổi dữ liệu16.10.2017
Kích5.55 Mb.
#33732
1   ...   22   23   24   25   26   27   28   29   ...   34
Tìm kiếm và hiển thị kết quả

Nếu chức năng xem thông tin của một đối tượng địa lý giúp chúng ta xác định thông tin của một đối tượng chưa biết thì chức năng tìm kiếm giúp chúng ta tìm ra những đối tượng thỏa một điều kiện nào đó.

Ở phần chức năng xem thông tin của đối tượng ta đã làm quen với bộ lọc GeometryFilter thì ở phần tìm kiếm ta sẽ làm quen với bộ lọc BetweenFilter và hiểu rõ hơn vể bộ lọc.

Các bộ lọc đều được tạo nên từ FilterFactory thông qua các hàm create. Bộ lọc thường dùng kết hợp với các Expression dưới dạng là các biến nhận vào.

Expression là một định dạng của Geotools dành cho các thông số đưa vào của Filter,chẳng hạn như:

LiteralExpression thường dành cho các kiểu dữ liệu nhận vào là kiểu int, double, string…

AttributeExpression dùng cho các phần liên quan đến thuộc tính của Feature (đã được thực hiện trong phần xem thông tin của đối tượng địa lý).

MathExpression dùng cho các phần nhân, chia, cộng, trừ giữa các Expression.

FuntionExpression dùng cho các phần tìm kiếm bé nhất, lớn nhất, trung bình.



Hình 3.30. Mô hình Expression trong geotools



Hình 3.31: Mô hình gói org.geotools.filter

Để thực hiện chức năng tìm kiếm ta sử dụng bộ lọc BetweenFilter. Thuộc tính của đối tượng địa lý có nhiều loại kiểu dữ liệu khác nhau nên ta viết các phương thức tìm kiếm cho tung loại dữ liệu. Chẳng hạn thuộc tính của đối tượng kiểu string ta sử dụng tìm kiếm bằng trả về đối tượng có giá trị thuộc tính bằng dữ liệu người dùng nhập vào. Đối với thuộc tính dạng int hay dạng double ta có thể hỗ trợ cho các tìm kiếm trong khỏang, tức là người dùng đưa ra một khỏang giá trị thuộc tính của đối tượng, bộ lọc trả về một tập hợp các đối tượng có giá trị thuộc tính thuộc khỏang trên.

Mô tả cách thức họat động của chức năng tìm kiếm trong chương trình:



Tương ứng với từng lớp dữ liệu được chọn làm lớp Active thì các thuộc tính của lớp đó sẽ được thể hiện trong vùng 1 ở hình bên dưới. Để thực hiện chức năng này ta cần xác định thuộc tính nào của lớp bản đồ sẽ được lấy làm cơ sở để tìm kiếm. Dựa vào sự chọn lựa thuộc tính từ phía người dùng chương trình sẽ xác định loại tìm kiếm cần được thực hiện và đưa ra vùng nhập thông tin cho phù hợp. Đối với kiểu của thuộc tính là dạng double hay int thì vùng cần nhập thông tin là vùng 2, vùng 3. Còn đối với kiểu thông tin là String thì vùng cần nhập thông tin là vùng 2. Tiếp đến ta cần tiến hành xác định màu hiển thị kết quả trả về trong vùng 4. Sau khi đã xác định xong các thông số cần thiết ta nhấn vào nút Tim kiem để tiến hành việc tìm kiếm. Kết quả của việc tìm kiếm sẽ được hiển thị ngược trở lại bản đồ thông qua lớp highlight và thông tin đầy đủ về các vùng sẽ được hiển thị trong vùng 6 hình minh họa phía dưới.


1

2

3

6

4

5

Hình 3.32. Các công cụ tìm kiếm



  1. Tìm kiếm trong khoảng:

Như mọi cách tạo ra bộ lọc trước tiên ta cần tạo ra FilterFactory và lấy FeatureSource, FeatureType của lớp bản đồ cần tìm kiếm thông tin.

FeatureSource fs = queryLayer.getFeatureSource();

FeatureType ft = fs.getSchema();

FilterFactory ff = FilterFactory.createFilterFactory();

Để tiến hành tìm kiếm trong khỏang ta cần xác định vế trái, vế phải và tên của cột thuộc tính cần so sánh. Dựa vào vùng 1 hình trên chương trình sẽ xác định được thuộc tính nào của lớp thao tác được người dùng chọn. thuộc tính đó nếu có kiểu là double hoặc int thì sẽ xuất hiện hai vùng 2,3 để nhập thông tin cho vế trái và phải. Thông tin của vế trái, vế phải, cột thuộc tính sẽ trở thành các Expression nhận vào cho bộ lọc theo cách dưới đây.

LiteralExpression literalLeft = ff.createLiteralExpression(leftValue);

LiteralExpression literalRight = ff.createLiteralExpression(rightValue);

AttributeExpression attExpre = ff.createAttributeExpression(ft,columnName);

Sau khi đã tạo ra các Expression, ta đưa các giá trị Expression đó vào bộ lọc để tiến hành lọc dữ liệu. Kết quả của việc lọc dữ liệu sẽ là các đối tượng địa lý thỏa điều kiện bé hơn hoặc bằng vế phải và lớn hơn hoặc bằng vế trái được trả về trong FeatureResult.

BetweenFilter betweenFilter = ff.createBetweenFilter();

betweenFilter.addLeftValue(literalLeft);

betweenFilter.addMiddleValue(attExpre);

betweenFilter.addRightValue(literalRight);

FeatureResults fsFilteredShape = fs.getFeatures(betweenFilter);

Việc lọc dữ liệu đến giai đọan này là tương đối hoàn chỉnh, công việc còn lại là ta thể hiện những thông tin trên ra màn hình. Để thực hiện công việc này ta sử dụng đến 2 hàm highlightFeatures và toStringAllInfo như ở trên phần hiển thị thông tin của đối tượng địa lý đã được nói đến. Do hàm HighlightFeatures cần thông số nhận vào là FeatureCollection nên ta cần phải thực hiện biến đổi FeatureResult thành FeatureCollection bằng cách làm như sau:

FeatureReader reader = fsFilteredShape.reader();

FeatureCollection fc = FeatureCollections.newCollection();

while (reader.hasNext()) {

Feature feature = reader.next();

fc.add(feature);

}

return fc;



Để biết rõ hơn cách làm thì có thể vào lớp MethodActionButtons để xem cách viết tìm kiếm và vào lớp LHaApplet_ToData để biết được cách thức họat động và thao tác lấy kết quả của phép tìm kiếm. Dưới đây là hàm hỗ trợ tìm kiếm đối với thuộc tính của đối tượng là kiểu double. Hàm thực hiện tìm kiếm với kiểu int cũng được tiến hành tương tự.

public FeatureCollection findBetween2Double(double leftValue,

double rightValue,String columnName,

MapLayer queryLayer)

{

try {


FeatureSource fs = queryLayer.getFeatureSource();

FeatureType ft = fs.getSchema();

FilterFactory ff = FilterFactory.createFilterFactory();

LiteralExpression literalLeft = ff.createLiteralExpression(leftValue);

LiteralExpression literalRight = ff.createLiteralExpression(rightValue);

AttributeExpression attExpre = ff.createAttributeExpression(ft,columnName);

BetweenFilter betweenFilter = ff.createBetweenFilter();

betweenFilter.addLeftValue(literalLeft);

betweenFilter.addMiddleValue(attExpre);

betweenFilter.addRightValue(literalRight);

FeatureResults fsFilteredShape = fs.getFeatures(betweenFilter);

FeatureReader reader = fsFilteredShape.reader();

FeatureCollection fc = FeatureCollections.newCollection();

while (reader.hasNext()) {

Feature feature = reader.next();

fc.add(feature);

}

return fc;



}

catch (Exception ex) {

throw new RuntimeException(ex.fillInStackTrace());

}

}



  1. Tìm kiếm bằng:

Việc tìm kiếm bằng được thực hiện trên kiểu của thuộc tính là kiểu String. Cách tìm kiếm này không cần thiết phải dùng đến bộ lọc hỗ trợ trong Geotools mà sử dụng mã Java để tiến hành.

Để tiến hành việc tìm kiếm này ta cần thông số nhận vào là chuỗi kí tự biểu diễn giá trị thuộc tính và so nó với các giá trị của cột thuộc tính mà người dùng chọn.

Đầu tiên, từ lớp dữ liệu đang thao tác ta dùng FeatureReader để đọc lấy ra từng feature tiếp đến lấy thuộc tính của đối tượng mà người dùng chọn để tìm kiếm xem có giống với giá trị mà người dùng nhập vào không, nếu có thì add vào FeatureCollection để chuẩn bị cho việc hiển thị kết quả ra màn hình giống như cách thể hiện ra màn hình của chức năng xem thông tin của đối tượng địa lý.

Dưới đây là phương thức hỗ trợ cho chức năng tìm kiếm bằng. Phương thức này được viết trong lớp MethodActionButtons của chương trình.

/**

* Tim kiem theo cot



* Nhan vao ten cot va chuoi

* Ham se dua tren chuoi nhap vao tim ra feature co thuoc tinh la chuoi do

*/

public FeatureCollection findByColumnName(String input,String columnName, MapLayer queryLayer){



try {

FeatureSource fs = queryLayer.getFeatureSource();

FeatureResults fsResult = fs.getFeatures();

FeatureReader reader = fsResult.reader();

FeatureCollection fc = FeatureCollections.newCollection();

while(reader.hasNext()){

Feature feature = reader.next();

String t = (String)feature.getAttribute(columnName);

if(input.equalsIgnoreCase(t)){

fc.add(feature);

}

}

return fc;



}

catch (Exception ex) {throw new RuntimeException(ex.getMessage());}



}

Dưới đây là hình mô tả cho chức năng tìm kiếm bằng:



Hình 3.33. Công cụ tìm kiếm bằng





          1. Каталог: data
            data -> HƯỚng dẫn càI ĐẶt và SỬ DỤng phần mềm tạo bài giảng e-learning
            data -> CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
            data -> Qcvn 81: 2014/bgtvt
            data -> Trung taâm tin hoïC Ñhsp ñEÀ thi hoïc phaàn access
            data -> PHỤ LỤC 2 TỔng hợp danh mục tài liệu tham khảO
            data -> Công ty cổ phần Xây dựng Điện vneco3
            data -> Nghiên cứu một số đặc điểm
            data -> NHỮng đÓng góp mới của luậN Án tiến sĩ CẤP ĐẠi học huế Họ và tên ncs : Nguyễn Văn Tuấn
            data -> Mẫu 01/hc-sn-dn (Ban hành kèm theo Thông tư số 83/2007/tt-btc ngày 16/7/2007 của Bộ Tài chính) TỜ khai hiện trạng sử DỤng nhà, ĐẤt thuộc sở HỮu nhà NƯỚc và ĐỀ xuất phưƠng án xử LÝ

            tải về 5.55 Mb.

            Chia sẻ với bạn bè của bạn:
1   ...   22   23   24   25   26   27   28   29   ...   34




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương