2013-03-14 39 views
5

Tôi có một số dữ liệu được thu thập mặc dù đã lắp đặt thiết bị GPS trong ô tô. Vì vậy, dữ liệu tôi có về cơ bản nằm trên/xung quanh đường/đường. Mỗi tọa độ có một số giá trị. Định dạng của dữ liệu là một cái gì đó như thế này.100k điểm đánh dấu trở lên trên bản đồ google mà không cần nhóm

lat   | long  | value 
--------------------------------- 
12.979155 | 77.644925 | 6 
--------------------------------- 
12.97916833 | 77.64493667 | 2 
--------------------------------- 
12.97917167 | 77.64492167 | 8 

Nhiệm vụ của tôi ở đây là vẽ các bản đồ dài này trên bản đồ google. Nó có vẻ là nhiệm vụ khá dễ dàng khi chúng ta nói về việc đặt 10, 100 hoặc 1000 điểm đánh dấu. Nhưng như tôi đã đề cập ở trên, chúng tôi đang thu thập dữ liệu bằng lái xe và khoảng cách giữa một hai lat-long hoặc hai điểm sẽ được trong vài feets (nói 2-3 feet).

Vì vậy, vào cuối cuộc khảo sát, tôi sẽ có 90-100k thời gian dài cho một phần nhỏ của một thành phố và có thể lên đến một triệu cho toàn thành phố.

Tôi đã thử thêm điểm đánh dấu 9-10k và mức đánh dấu là tốt nhưng khi tôi cố gắng tải 40k, 50k, 60k, trình duyệt của tôi rất chậm và đây là thông báo lỗi tôi kết thúc.

Uncaught RangeError: Maximum call stack size exceeded  main.js:1 

Tôi đã được googling rất nhiều về nó, nhưng tôi m không thể tìm thấy bất kỳ ví dụ hoặc hướng dẫn đó sẽ dẫn tôi để đặt 1 triệu điểm đánh dấu bằng cách sử dụng công nghệ tôi biết một chút. (Đó là asp.net). Tìm thấy ví dụ này http://www.scribblemaps.com/markerComplex/ Bởi Jonathan Wagner, nhưng tôi không thể hiểu nó và thực hiện nó trong mã hiện tại của tôi mà đi như thế này.

// Để tìm nạp lâu dài từ máy chủ MSSQL.

function PushValues(ParameterID) { 
     a = ParameterID.slice(5); 
    var CityID = $('#ddlCity').val().split('|'); 
    $.ajax({ 
     type: "POST", 
     url: "index.aspx/PushLatLong", 
     data: "{CityID:'" + CityID[0] + "',OperatorID:'" + $('#ddlOperator').val() + "',ParameterID:'" + ParameterID.slice(4) + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     cache: false, 
     success: function (response) { 
      GooglePlaces = response.d.split('#'); 
      if (GooglePlaces != "Blank") { 
       HasValues = 1; 
      } else { 
       HasValues = 0; 
      } 

     }, 
     Error: function (r) { 

     } 
    }); 
} 

// Giá trị địa điểm trong bản đồ google.

function PlaceValues() { 
    var options = { zoom: 3, center: new google.maps.LatLng(37.09, -95.71), mapTypeId: google.maps.MapTypeId.ROADMAP }; 
    var map = new google.maps.Map(document.getElementById('map'), options); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < GooglePlaces.length; i = i + 2) { 
     ltlg = new google.maps.LatLng(GooglePlaces[i], GooglePlaces[i + 1]); 
     var marker = new google.maps.Marker({ 
      position: ltlg, 
      map: map, 
      title: 'Place number', 
      icon: "img/GoogleIcons/" + legendfirstvalue[1] 
     }); 
     bounds.extend(ltlg); 
    } 
    map.fitBounds(bounds) 
    $('#DivLoadImage').hide(); 
} 

Một điều nữa tôi muốn đề cập đến ở đây là màu sắc của điểm đánh dấu tùy thuộc vào giá trị của lat dài. Vì vậy, tôi sẽ có nhiều điểm đánh dấu màu. Tôi đã có thể dễ dàng thử clustring các điểm đánh dấu nhưng, sau đó tôi sẽ không thể nhìn thấy màu sắc đánh dấu cho đến khi tôi zoon vào khu vực. Vì vậy, không có cách nào tôi có thể sử dụng clustring.

Tôi chắc chắn sẽ có hàng triệu lỗi trong mã của tôi. Tôi muốn thay đổi cách tiếp cận của tôi nếu cần thiết. Here là bản trình diễn của ứng dụng.

+0

http://coeindia.in/test/harry/index.html không hoạt động – Kiquenet

+0

Đây là url từ trang web của nhà tuyển dụng cũ của tôi. Họ có thể đã thực hiện một số thay đổi trong các thư mục. – Ravi

Trả lời

1

Bạn có thể sử dụng bảng tổng hợp để lưu trữ dữ liệu và truy xuất dữ liệu từ đó - có thể là ví dụ tương tự như ví dụ của bạn đang sử dụng - và vì flash của nó có thể khiến chúng nhanh hơn nhiều so với api bình thường có thể hoàn thành.

Bản thân các bảng Fusion sẽ hiển thị các điểm đánh dấu ở phía máy chủ thành các ô và truy xuất các dấu đó.

API Google Maps cho phép bạn hiển thị dữ liệu trong Google Bảng kết hợp làm lớp trên bản đồ bằng cách sử dụng đối tượng FusionTablesLayer.

Ví dụ về nó in this link.

Cùng với fusiontables tôi sẽ làm một cái gì đó giống như khung nhìn render dựa mà về cơ bản có nghĩa là vẽ chỉ dấu có thể nhìn thấy khung nhìn - không thực sự "kỹ thuật phân nhóm" nhưng rất hữu ích khi chúng ta đang xem xét tốc độ kết xuất.Đọc thêm về chúng google docs (fusiontables)viewport marker management. Cùng một trang cũng liên kết chi tiết hơn đến Fusiontables api và hướng dẫn.

Nếu cuối cùng bạn quyết định cụm ở phía máy chủ - hãy chuẩn bị rằng nó không phải là một nhiệm vụ dễ dàng - nhưng nếu bạn thực hiện, hãy triển khai một cái gì đó tương tự như phân cụm dựa trên lưới. (Cũng giải thích withing cùng một trang - liên kết damn tốt?)

Cũng cần lưu ý rằng:

Chỉ có 100.000 hàng đầu tiên của dữ liệu trong một bảng được ánh xạ hoặc bao gồm trong kết quả truy vấn.

Để đọc thêm, see from here.

Cheers.

+0

@Mauno V. Tôi đã xem chi tiết bạn đã đề cập ở trên. Có một số hạn chế với bảng tổng hợp. Có giới hạn trong tìm nạp và tải lên dữ liệu cộng với một dữ liệu chỉ có thể lưu trữ 250 mb dữ liệu cho mỗi người dùng. Tôi không nghĩ rằng theo yêu cầu của tôi, nó sẽ là lựa chọn đúng đắn cho tôi. – Ravi

+0

Vâng, nó cần phải có một số giới hạn ofc. Nhưng với thiết kế phù hợp nó có thể hoạt động .. Bạn đã kiểm tra hay hỏi bạn có nhận được nhiều hơn nếu bạn mua nó cho doanh nghiệp và trả tiền mặt không? Tôi tin rằng google cũng cần kiếm tiền để họ đặt ra giới hạn. :) –

0

Bảng kết hợp là cách để tìm kiếm dữ liệu lớn. Các bảng này có thể được xem và được vẽ bằng cách sử dụng GmapGIS.

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