Story lm 2022-08-02 23:03 采纳率: 0%
浏览 56
已结题

Arcgis ClosestFacilityParameters怎么知道获取的最佳线路是属于哪个id的?

参考文献:https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ClosestFacilityParameters.html


<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="initial-scale=1, maximum-scale=1, user-scalable=no"
    />
    <title>ArcGIS Developer Guide: Facility routing</title>
    <style>
      html,
      body,
      #viewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }
    </style>

    <link
      rel="stylesheet"
      href="https://js.arcgis.com/4.24/esri/themes/light/main.css"
    />
    <script src="https://js.arcgis.com/4.24/"></script>

    <script>
      require([
        "esri/config",
        "esri/Map",
        "esri/views/MapView",
        "esri/Graphic",
        "esri/layers/GraphicsLayer",
        "esri/rest/closestFacility",
        "esri/rest/support/ClosestFacilityParameters",
        "esri/rest/support/FeatureSet",
        "esri/symbols/Symbol",
      ], function (
        esriConfig,
        Map,
        MapView,
        Graphic,
        GraphicsLayer,
        closestFacility,
        ClosestFacilityParameters,
        FeatureSet,
        Symbol
      ) {
        esriConfig.apiKey = "YOUR_API_KEY";

        const routeSymbol = {
          type: "simple-line",
          color: [50, 150, 255, 0.75],
          width: "5",
        };

        const facilities = [
          {
            id: "a",
            center: [-122.67484, 45.52087],
          },
          {
            id: "b",
            center: [-122.68365, 45.52327],
          },
          {
            id: "c",
            center: [-122.66406, 45.52378],
          },
          {
            id: "d",
            center: [-122.6631, 45.52093],
          },
          {
            id: "e",
            center: [-122.66208, 45.5197],
          },
          {
            id: "f",
            center: [-122.66247, 45.51845],
          },
          {
            id: "g",
            center: [-122.66299, 45.51827],
          },
        ];

        const routesLayer = new GraphicsLayer();
        const facilitiesLayer = new GraphicsLayer();

        const map = new Map({
          basemap: "arcgis-streets",
          layers: [routesLayer, facilitiesLayer],
        });

        const view = new MapView({
          container: "viewDiv",
          map: map,
          center: [-122.67584, 45.52087],
          zoom: 14,
          constraints: {
            snapToZoom: false,
          },
        });

        view.popup.actions = [];

        view.when(() => {
          addFacilityGraphics();
          findClosestFacility(
            addStartGraphic(view.center),
            facilitiesLayer.graphics
          );
        });

        view.on("click", (event) => {
          view.hitTest(event).then((response) => {
            if (response.results.length === 1) {
              findClosestFacility(
                addStartGraphic(event.mapPoint),
                facilitiesLayer.graphics
              );
            }
          });
        });

        function findClosestFacility(startFeature, facilityFeatures) {
          const params = new ClosestFacilityParameters({
            incidents: new FeatureSet({
              features: [startFeature],
            }),
            facilities: new FeatureSet({
              features: facilityFeatures.toArray(),
            }),
            returnRoutes: true,
            returnFacilities: true,
            defaultTargetFacilityCount: 3,
          });

          const url =
            "https://route-api.arcgis.com/arcgis/rest/services/World/ClosestFacility/NAServer/ClosestFacility_World";

          closestFacility.solve(url, params).then(
            (results) => {
              showRoutes(results.routes);
            },
            (error) => {
              console.log(error.details);
            }
          );
        }

        function addStartGraphic(point) {
          view.graphics.removeAll();
          const graphic = new Graphic({
            symbol: {
              type: "simple-marker",
              color: [255, 255, 255, 1.0],
              size: 8,
              outline: {
                color: [50, 50, 50],
                width: 1,
              },
            },
            geometry: point,
          });
          view.graphics.add(graphic);
          return graphic;
        }

        function addFacilityGraphics() {
          facilities.forEach((point) => {
            facilitiesLayer.graphics.add(
              new Graphic({
                id: point.id,
                symbol: {
                  type: "web-style",
                  name: "grocery-store",
                  styleName: "Esri2DPointSymbolsStyle",
                },
                geometry: {
                  type: "point",
                  longitude: point.center[0],
                  latitude: point.center[1],
                  spatialReference: view.spatialReference,
                },
              })
            );
          });
        }

     function showRoutes(routes) {
        // Show the routes to the closest facilities
        routesLayer.removeAll();
        routes.forEach((route, i) => {
          route.symbol = routeSymbol;
          routesLayer.add(route);
        });
      }
    });
  </script>
</head>
<body>
  <div id="viewDiv"></div>
</body>
</html>
       
  • 写回答

2条回答

  • 云之旋律 2022-08-03 09:27
    关注

    代码无法运行,请重新传个正常的上来.

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 修改了问题 8月3日
  • 修改了问题 8月3日
  • 修改了问题 8月3日
  • 展开全部

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)