Làm cách nào để truy vấn tất cả các bản ghi (> 1000) và xuất sang csv?


13

Tôi đã đăng trong diễn đàn arcgis nhưng không bao giờ có câu trả lời. Bất cứ ai có thể cho tôi biết làm thế nào để giải quyết điều này?

Giả sử bạn có hồ sơ theo dõi xe từ ngày 1 tháng 10 đến ngày 31 tháng 12 với thông tin tốc độ gió. Tất cả dữ liệu được lưu trong cơ sở dữ liệu địa lý (sde-sqlserver) và trong ArcGIS Server 10.1 dưới dạng lớp tính năng. Một thanh trượt thời gian hiển thị các vị trí của một chiếc xe với tốc độ gió.

Khi người dùng thay đổi phạm vi thời gian (ví dụ: Oct.2 - Oct.4), tác vụ truy vấn đầu tiên (tính) sẽ tính số lượng tính năng trong phạm vi. Thường có hơn 1000 kết quả thậm chí hai ngày (ví dụ: 1750) (mặc dù tôi không muốn thay đổi giới hạn này).

Tôi đã sử dụng một tác vụ truy vấn khác (execeforIds) để giữ tất cả các bản ghi trong tay nhưng giảm số lượng với mô-đun (1/10) vẫn còn đủ để tạo một biểu đồ đẹp cho xu hướng chung của tốc độ gió. Tuy nhiên, tôi cũng muốn cung cấp tùy chọn tải xuống toàn bộ tập dữ liệu trong csv (trong trường hợp này là 1750 hàng)

Ở đây, tôi đã sử dụng findtask để lấy dữ liệu thuộc tính trong phạm vi thời gian.

try {
    //console.log(app.objIDs);
    var attribs;
    csvdata = "";

    var find = new esri.tasks.FindTask("http://xyz.com/arcgis/rest/services/Realtime/Car_Wind_WM/MapServer");
    var params = new esri.tasks.FindParameters();
    params.layerIds = [0];
    params.searchFields = ["OBJECTID"];

    for (var i = 0; i < app.objIDs.length; i++) {
        params.searchText = app.objIDs[i];
        find.execute(params, function (results) {
            attribs = results[0].feature.attributes;
            csvdata += attribs.Date_Central + ',' + attribs.Longitude + "," + attribs.Latitude + "," + attribs.windspeed + "\n";
            console.log(csvdata); //1
        }, function (error) {
            alert("Error");
        });
    }
} catch (error) {
    alert("Change the time range first");
}
console.log(csvdata); //2
setTimeout(function () {
    formatData(app.csvdata);
}, (3 * 1000));

csvdata không được xác định tại console.log2, mặc dù tất cả csvdata (trong console.log1) hiển thị dữ liệu trong bảng điều khiển. Vấn đề có vẻ như thời gian của find.execute đã hoàn tất, vì vậy tôi đã thêm setTimeout.

Điều này có vẻ hiệu quả nhưng khi tôi tăng phạm vi thời gian, nó sẽ không rõ ràng.

Có cách nào để giữ tất cả các bản ghi (1000 - 200.000) trong một khoảng thời gian cụ thể và xuất sang csv không?

Câu trả lời:


6

Một trong những lựa chọn là để hệ thống trả lại hồ sơ cho bạn. Nó sẽ cung cấp cho bạn các số kỷ lục cho tất cả 1750 hàng mặc dù nó sẽ chỉ trả về dữ liệu cho 1000.

Khi bạn nhận được danh sách các bản ghi (tôi không chắc chúng có được sắp xếp không), hãy rút 1000 đầu tiên, sau đó thêm các OBRIID đầu tiên và cuối cùng vào vị trí

OBJECTID>=firstobjectid and  OBJECTID<=lastobjectid

Lặp lại nhiều lần nếu cần thiết.


6

Tôi sẽ đề xuất sử dụng QueryTask và đặt returnIdsOnly = true .

Lưu ý rằng mặc dù có giới hạn về số lượng tính năng có trong phản hồi của bộ tính năng, nhưng không có giới hạn về số lượng ID đối tượng được trả về trong phản hồi mảng ID. Khách hàng có thể khai thác điều này để có được tất cả các ID đối tượng tuân thủ truy vấn bằng cách chỉ định returnIdsOnly = true và sau đó yêu cầu các bộ tính năng cho các tập hợp con của ID đối tượng.

Điều này có thể được tìm thấy trong QueryTask của Javascript .

Nó cũng được hỗ trợ trong Truy vấn của Silverlight API .

Nếu bạn đang sử dụng kiểu dữ liệu không gian của máy chủ SQL gốc và không sử dụng phiên bản, bạn có thể xem xét việc chỉ viết một dịch vụ Microsoft REST bằng cách sử dụng mẫu làm điểm bắt đầu.


Không nhận ra điều này - tốt đẹp! Trong dòng đầu tiên, bạn có nghĩa là returnIdsOnly = true phải không?
awesomo

Rất tiếc, đó là sự thật, tôi đã thay đổi câu trả lời của mình bây giờ.
Kirk Kuykendall

Cảm ơn Kirk. Tôi biết "returnIdsOnly = true" trong Sliverlight API nhưng tôi không thể tìm thấy trong Javascript api như bạn đã đề cập. Tôi sẽ kiểm tra MS REST.
dùng14693

5
  1. Bạn chắc chắn có thể tăng giới hạn bản ghi dịch vụ lên 10k trở lên nếu bạn đang xử lý các điểm và thuộc tính cặp đôi - đặc biệt nếu bạn không tạo đồ họa.

  2. Bạn có thể thực hiện tác vụ xử lý địa lý không đồng bộ và nhận dữ liệu sau khi được tạo trong thư mục đầu ra trên máy chủ.

  3. Nếu bạn ném nếu một thứ tự theo mệnh đề và thời gian trong truy vấn của bạn. Bạn có thể đọc thời gian trong bản ghi cuối cùng và nhận được bộ bản ghi tiếp theo lớn hơn thời gian đó. Tiếp tục đi cho đến khi bạn đạt đến cuối phạm vi thời gian của bạn.

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.