Как остановить автоматическое сохранение страницы после того, как вы уронили значок на карте Esri? - PullRequest
0 голосов
/ 18 марта 2020

Я работаю над проектом MVC. Я интегрировал карту Esri в вид. Ранее я мог добавить булавку на карту, получить координаты и сохранить их. Но совсем недавно что-то пошло не так, я не знаю что это. По какой-то причине, когда я опускаю булавку на карте, запускается сохранение даже, и оно сохраняет все остальные данные, кроме координат. Это также закрывает страницу. Я исследовал, я не могу определить проблему. Пожалуйста помогите. Пожалуйста, посмотрите код для интеграции карты на представлении ниже:

<script type="text/javascript">
    var latitude;
    var longitude;
    var zoomLevel;
    require(["esri/views/MapView",
        "esri/WebMap", "esri/config",
        "esri/widgets/Sketch",
        "esri/layers/GraphicsLayer"],

        function (MapView, WebMap, esriConfig, Sketch, GraphicsLayer) {

            esriConfig.portalUrl = "https://portal.environment.gov.za/portal";
            var webmap = new WebMap({
                portalItem: {
                    id: "04582be14885483da48f29398960f653"
                }
            });

            var graphicsLayer = new GraphicsLayer();

            var view = new MapView({
                map: webmap,
                //zoom: 14,
                container: "viewDiv"
            });

            var symbol = {
                type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
                style: "circle",
                color: "blue",
                size: "8px", // pixels
                outline: { // autocasts as new SimpleLineSymbol()
                    color: [255, 255, 0],
                    width: 1 // points
                }
            };

            webmap.layers.add(graphicsLayer);

            var sketch = new Sketch({
                layer: graphicsLayer,
                view: view,
                symbol: symbol,
                creationMode: "update",
                availableCreateTools: ["point"]
                //container: "viewDiv"
            });

            view.ui.add(sketch, {
                position: "top-right"
            });

            //Listen to sketch widget's create event.

            sketch.on('create', function (event) {
                 // check if the create event's state has changed to complete indicating
                 // the graphic create operation is completed.
            if (view.zoom >= 11) {                  
                let gra = event.graphic.clone();
                event.graphic.layer.removeAll();
                gra.symbol.color = "red";
                gra.layer.add(gra);
                console.log(view.zoom);
                console.log("X = ", gra.geometry.x);
                console.log("Y = ", gra.geometry.y);
                latitude = gra.geometry.x;
                longitude = gra.geometry.y;
                zoomLevel = view.zoom;
                debugger;
            }
            else {
                alert("please zoom in");
                event.graphic.layer.remove(event.graphic);
            }
            });

        });
    function saveCoordinates() {
        debugger;
        $("#lat").val(latitude);
        $("#long").val(longitude);
    };
</script>

Как карта добавляется:

<div class="panel-body">
        <div class="form-group">
            <div id="viewDiv" style="position:relative; width:900px; height:600px; border:1px solid #000;"></div>
        </div>
    </div>

Затем кнопка сохранения:

<div class="form-group">
    <div class="col-md-10">
        <input type="submit" class="btn btn-primary" id="savebutton" value="Save" onclick="validateForm(); saveCoordinates()" />
        @Html.ActionLink("Cancel", "Index", "Application", null, new { @class = "btn btn-primary", @id = "cancelbutton" })
    </div>
</div>

1 Ответ

0 голосов
/ 20 марта 2020

Когда вы используете sketch.on('create', function), функция срабатывает каждый раз, когда в эскизе создается что-то новое. Если это ломаная линия, событие 'create' запускается каждый раз, когда создается новая точка в ломаной линии. Если вы посмотрите на esri JavaScript APi, они предупреждают об этом и предоставляют пример кода, который сработает только тогда, когда пользователь примет их эскиз:

// Listen to sketch widget's create event.
sketch.on("create", function(event) {
  // check if the create event's state has changed to complete indicating
  // the graphic create operation is completed.
  if (event.state === "complete") {
      // Do stuff here
   }
}

...