Tìm kiếm thiết bị đầu cuối thành phố trên các thành phố trên bản đồ


13

Tôi muốn tìm làng / thành phố đang kết thúc . Điều đó có nghĩa là: Tôi cần ngôi làng này được liên kết với tối đa một làng trên khoảng cách X km.

Tôi chỉ tự hỏi làm thế nào thuật toán này được gọi là (tôi đoán ai đó đã tạo ra một cái gì đó tương tự trước đây).

Có một công cụ cho việc này? Khái niệm này được gọi như thế nào?

Ví dụ

 City ------------ Village 1 ------- Village 2 ------ Village 3 - - - [ Mountain]
                    \                 \                                \
                     Village 4         |                                Road
                     |                  \                            in mountains
                     Village 5----------Village6---------Village7 - - - - -  

Chừng nào Đường trên núi dài hơn Xkm, Village 3Village 7sẽ được xem xét bởi thiết bị đầu cuối của tôi , bởi vì chúng được liên kết với một làng (V2, tương ứng là V6).

Nếu không, tôi sẽ muốn xây dựng một cái với dữ liệu mở mà chúng ta có.


Những gì tôi đã thử :

Tải xuống dữ liệu OSM cho quốc gia của tôi (Romania) và nhập các làng và thành phố vào cơ sở dữ liệu. Sử dụng các chức năng định vị địa lý từ cơ sở dữ liệu Tôi có thể tìm thấy những ngôi làng không có nhiều hơn làng X trong bán kính R km.

Tuy nhiên đây không phải là một giải pháp cho trường hợp của tôi bởi vì trong trường hợp của tôi, một ngôi làng có thể ở phía bên kia của ngọn núi, như trong ví dụ trên, nhưng không có cách nào tốt cho nó (hoặc không có cách nào cả).


3
Khái niệm này là kết nối và trong lý thuyết đồ thị sẽ được biểu diễn dưới dạng số 'cạnh' một 'nút' có. Bạn sẽ tìm kiếm các nút có một cạnh sau khi bạn lọc ra các cạnh trên ngưỡng trọng lượng của bạn. Một giải pháp thực tế sẽ phụ thuộc vào một công cụ, ngôn ngữ hoặc phần mềm mà bạn đang làm việc.
RoperMaps

@RoperMaps Tôi chưa có công cụ nào được thiết lập, nhưng hỏi chung chung (và cuối cùng, nếu ai đó đã xây dựng một cái gì đó như thế này trước đây). Tôi sẽ mở rộng điều này, cho điểm (có bao nhiêu cách ngắn hơn X mà nút đó có). Điểm càng lớn, càng nhiều kết nối (và càng ít thiết bị đầu cuối ). Nếu tôi xây dựng nó, có lẽ tôi sẽ kết thúc bằng cách phân tích một số biểu đồ bằng Node.js, nhưng chỉ tự hỏi liệu có ai khác đã làm điều đó trước đây không. : D
Ionică Bizău

@RoperMaps Tôi đoán tôi có thể sử dụng OSM cho việc này, nhưng tôi thấy nó vô cùng khó khăn (ví dụ: có những cách kết nối các nút, nhưng các nút này chỉ là các điểm, không đại diện cho các thành phố). Tôi có thể viết một thuật toán để tìm các trong biểu đồ hoặc một cái gì đó mở rộng hơn một chút cho trường hợp của tôi, nhưng tôi không chắc cách sử dụng dữ liệu OSM cho việc này (hoặc có cách nào dễ hơn OSM không?).
Ionică Bizău

Phần mềm nào bạn đang sử dụng ? Bạn làm việc trong khoảng cách thực hay trong khoảng cách bay chim?
radouxju

@radouxju Nguyên mẫu làm việc đầu tiên của tôi là khoảng cách bay của chim (bán kính, dựa trên tọa độ) ,agagain, đó là một sự khởi đầu, nhưng đó không phải là điều tôi muốn. Tôi đã viết tập lệnh của mình bằng Node.js và sử dụng MongoDB. Tôi thích khoảng cách thực sự: ví dụ: nếu có hai ngôi làng, cách nhau bởi một ngọn đồi, không có con đường nào trên ngọn đồi, thì khoảng cách giữa chúng sẽ là con đường ngắn nhất nối chúng.
Ionică Bizău

Câu trả lời:


2

Tôi thấy rằng bạn cần phải bước qua hình dạng đường lấy ra tọa độ cho mỗi bộ đệm điểm cuối / đầu cuối, nó chọn hình dạng đường (từ đường fc của bạn) nếu bạn chỉ trả về một tính năng là điểm cuối / điểm cuối, nếu nhiều hơn một nó không phải và lặp qua. Hy vọng điều này có ý nghĩa ...


Vâng, và làm thế nào để làm điều đó?
Ionică Bizău

Bạn có thể làm điều đó với Modelbuilder và xuất sang Python. ArcObjects là một tuyến đường khác nhưng phức tạp hơn. Bạn đã từng sử dụng Modelbuilder trước đây chưa?
dùng17260

Một lựa chọn không gian với tùy chọn "chạm" có thể giúp bạn bắt đầu. Có thể thu hẹp bộ lựa chọn ban đầu khi bạn đảo ngược bộ lựa chọn thành bộ không chọn.
dùng17260

Tôi đã không sử dụng Modelbuilder. Tôi cần một câu trả lời từng bước, bởi vì đó là lần tương tác đầu tiên của tôi với dữ liệu OSM. : D Thật khó cho tôi để tìm hướng dẫn về nó.
Ionică Bizău

Wow, đó là một yêu cầu lớn. Bạn có quyền truy cập vào giấy phép ArcInfo của ArcMap không?
dùng17260

2

Bạn có thể đạt được điều này bằng cách sử dụng QGIS và một phần mềm ban đầu nhằm mục đích tính toán kết nối ngang như Graphab hoặc Conefor . Ví dụ :

  • Nhập dữ liệu OSM của bạn vào QGIS, bằng cách kéo và thả dữ liệu hoặc bằng cách sử dụng plugin OpenStreetMap.
  • Lưu dữ liệu của bạn dưới dạng hình (nhấp chuột phải)
  • Sử dụng plugin Conefor để tạo các nút và tệp kết nối, như được giải thích ở đây
  • Tính toán tầm quan trọng của từng nút và liên kết bằng cách sử dụng Conefor. Một "nút cuối" sẽ không quan trọng đối với kết nối. Tôi nghĩ rằng bạn có thể sử dụng số liệu BC (IIC) vì nó tính đến "số lượng đường dẫn ngắn nhất giữa tất cả các cặp bản vá đi qua một nút cụ thể (...) [và] độ dài (số lượng liên kết) của đường dẫn giữa các bản vá trong đó một nút cụ thể có liên quan " (xem tại đây )

Tôi chưa thể kiểm tra điều này - tôi không may là không có đủ thời gian ngay bây giờ. Nhưng tôi nghĩ rằng nó có thể hoạt động, nếu bạn mở một chút tinh chỉnh. Ví dụ: có thể bạn sẽ phải xóa các liên kết kết nối hai nút ở mỗi bên của chướng ngại vật (núi, v.v.), bằng tay (nếu chúng không quá nhiều) hoặc bằng cách sử dụng các chức năng geoproccesing và hình dạng chứa chướng ngại vật của bạn .


Cảm ơn vì điều đó! Sẽ thử nó sớm thôi. [và] chiều dài (số lượng liên kết) - điều đó sẽ cho tôi khoảng cách tính bằng km (nếu không, làm thế nào tôi có thể có được điều đó?)?
Ionică Bizău

Để có được khoảng cách giữa các điểm, bạn không cần phải sử dụng bất kỳ phần mềm nào ngoài QGIS. Xem ở đâyở đây ví dụ. Đơn vị khoảng cách được sử dụng phụ thuộc vào hệ tọa độ lớp.
Mefimefi

Ngoài ra, nếu bạn muốn có thêm thông tin về các công cụ tập trung vào kết nối ngang, bạn có thể muốn xem cuộc thảo luận về Researchgate này
Mefimefi

Tôi thấy QGIS có một chút lỗi (ít nhất là trên macbook của tôi), nhưng liên kết cuối cùng rất hữu ích. Sẽ kiểm tra câu trả lời của họ là tốt. Cảm ơn!
Ionică Bizău

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.