Helpex - Trao đổi & giúp đỡ Đăng nhập
23

Tôi đang tìm một thư viện bằng javascript cho phép tôi thực hiện các truy vấn không gian địa lý. Tôi biết về OpenLayers và GoogleMaps, nhưng hai thứ này không hỗ trợ những thứ như giao điểm liên hợp, v.v.

+----+
|    |
|  +-+--+
+--+-+  |
   |    |
   +----+

đến

    +----+
    |    |
    |    +--+
    +--+    |
       |    |
       +----+
23 hữu ích 1 bình luận 5.0k xem chia sẻ
6

Cập nhật 2014-04-29: Xem Turf , có vẻ rất hứa hẹn

JSTS có thể kết hợp các đối tượng hình học trong trình duyệt. JSTS tích hợp với thư viện openlayers và nó mở rộng các lớp hình học openlayers (ví dụ: OpenLayers.Geometry.Polygon) để chúng có khả năng hoạt động hình học. Thí dụ:

>> var poly1 = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                   new OpenLayers.Geometry.Point(0.0,0.0), 2, 5);
>> var poly2 = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                   new OpenLayers.Geometry.Point(1.0,1.0), 2, 4);
>> var poly_u = poly1.union(poly2);
>> var poly_d = poly1.difference(poly2);
>> print(poly_u);
POLYGON((1.5667154718422638 -0.4142135623730949,1.1755705045849463 -1.618033988749895,
  -1.1755705045849465 -1.6180339887498947,-1.902113032590307 0.618033988749895,
  -0.41421356237309503 1.6990562312593451,-0.4142135623730949 2.414213562373095,
   2.414213562373095 2.414213562373095,2.414213562373095 -0.4142135623730949,
   1.5667154718422638 -0.4142135623730949))

Geoscript JS rất hay nếu bạn muốn thực hiện các hoạt động hình học trên máy chủ trong JS.

6 hữu ích 2 bình luận chia sẻ
3

Tôi đã viết Truy vấn không gian https://github.com/netshade/spatial_query để thực hiện việc này.

Ngoài ra, bạn có thể xem http://geoscript.org/index.html , có khả năng được hỗ trợ tốt hơn Truy vấn không gian. Tuy nhiên, nếu bạn quyết định xem SQ, tôi rất vui khi biết nó có hiệu quả với bạn hay không.

3 hữu ích 3 bình luận chia sẻ
1

Bạn có thể mở rộng OpenLayers để hỗ trợ hoạt động này. Tôi thực hiện điều này bằng cách sử dụng các hàm gốc của OpenLayers. Hãy thử điều này, có thể bạn phải sửa và tùy chỉnh mã này.

// The first object is instanced using data given from gmaps
var objBound1 = new OpenLayers.Bounds();
objBound1.extend(new OpenLayers.LonLat(2,2));
objBound1.extend(new OpenLayers.LonLat(8,8));

// The second object is instanced using data given from gmaps
var objBound2 = new OpenLayers.Bounds();
objBound2.extend(new OpenLayers.LonLat(5,5));
objBound2.extend(new OpenLayers.LonLat(10,10));

// Extract limits from our objects
var arrBound1 = objBound1.toArray();
var arrBound2 = objBound2.toArray();

// Determine an virtual bound. It must contain our two bounds
var intMinLeft = arrBound1.left < arrBound2.left ? arrBound1.left : arrBound2.left;
var intMinTop = arrBound1.top < arrBound2.top ? arrBound1.top : arrBound2.top;
var intMaxRight = arrBound1.right > arrBound2.right ? arrBound1.right : arrBound2.right;
var intMaxBottom = arrBound1.bottom > arrBound2.bottom ? arrBound1.bottom : arrBound2.bottom;

// Search all points of virtual bound, storing the points contained in bound1 or bound2
var objBoundResult = new OpenLayers.Bounds();
for(var intI = intMinLeft; intI < intMaxRight; intI++) {
    for(var intJ = intMinTop; intJ < intMaxBottom; intJ++) {
        if(objBound1.containsLonLat(new OpenLayers.LonLat(intI, intJ)) || objBound2.containsLonLat(new OpenLayers.LonLat(intI, intJ))) {
            objBoundResult.add(intI, intJ);
        }
    }
}

// objBoundResult is what you want
1 hữu ích 1 bình luận chia sẻ
0

Bạn có thể nhận kết quả truy vấn cho bán kính hoặc hình chữ nhật bao gồm đa giác của bạn, sau đó lọc kết quả bằng kỹ thuật được mô tả tại đây: http://msdn.microsoft.com/en-us/library/cc451895.aspx . Ví dụ này sử dụng bản đồ bing, nhưng bạn có thể dễ dàng sử dụng các nguyên tắc tương tự bằng cách sử dụng bất kỳ dịch vụ bản đồ nào bạn thích.

0 hữu ích 1 bình luận chia sẻ
0

Bạn đã nhìn vào geoUtils ?

Tôi không chắc liệu nó có hỗ trợ op union hay không, nhưng có thể đáng để thử.

0 hữu ích 0 bình luận chia sẻ
-1

Nếu bạn có sẵn một máy chủ, bạn có thể chạy ESRI ArcGIS Server 10 và bắt đầu dịch vụ Geometry. Điều này có chức năng này khả dụng thông qua giao diện API (bao gồm cả REST). Xem tài liệu trợ giúp của họ: SOAP SDK

-1 hữu ích 1 bình luận chia sẻ
-1

Bạn có thể sử dụng PostGIS DB wich có hỗ trợ cho JDBC. Kiểm tra ví dụ ở đây: http://postgis.refraction.net/docs/ch05.html#id2644717

:)

DsP

-1 hữu ích 1 bình luận chia sẻ
-1

Bạn có thực sự cần làm điều này ở phía khách hàng không? Union là một hoạt động khá nặng và có thể được thực hiện tốt hơn ở phía máy chủ.

Một API khác có thể hữu ích là API ArcGIS Javascript, mặc dù từ những gì tôi có thể thấy, tôi không nghĩ nó sẽ hoạt động liên hợp mà không có Máy chủ ArcGIS: http://help.arcgis.com/en/webapi/javascript/arcgis/

-1 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript union geospatial , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading