Making a GeoJSON layer editable with the Leaflet.Editable plugin Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Pushing features to external GeoJSON fileAdding GeoJSON layer Leaflet map?Leaflet SVG layer is obscuring the underlying GeoJSON interactivityFormating GeoJSON file with Leaflet Ajax-pluginHow to add GeoJSON layer with GraphHopper?Use a global GeoJSON layer in LeafletMarkerCluster don't work with geojson layer in leafletHow do I create a geoJSON layer with a div icon instead of the leaflet standard icon?Marker differently depending on the tool with Leaflet.EditableMake GeoJSON easily editableUsing Leaflet Search plugin with GeoJSON layer (L.Control.Search)

grandmas drink with lemon juice

Does polymorph use a PC’s CR or its level?

Antler Helmet: Can it work?

macOS-like app switching in Plasma 5

Sorting numerically

Date formating in QGIS expression

What would be Julian Assange's expected punishment, on the current English criminal law?

Check which numbers satisfy the condition [A*B*C = A! + B! + C!]

What causes the vertical darker bands in my photo?

How do I stop a creek from eroding my steep embankment?

What is this single-engine low-wing propeller plane?

What makes black pepper strong or mild?

How to zip specific files that are located in subdirectories

Is it true that "carbohydrates are of no use for the basal metabolic need"?

What are the pros and cons of Aerospike nosecones?

How to motivate offshore teams and trust them to deliver?

Why is black pepper both grey and black?

Want to buy sofa for living room. What to do about cats?

Area of a 2D convex hull

Why don't the Weasley twins use magic outside of school if the Trace can only find the location of spells cast?

Why was the term "discrete" used in discrete logarithm?

Single word antonym of "flightless"

Why is "Captain Marvel" translated as male in Portugal?

Withdrew £2800, but only £2000 shows as withdrawn on online banking; what are my obligations?



Making a GeoJSON layer editable with the Leaflet.Editable plugin



Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Pushing features to external GeoJSON fileAdding GeoJSON layer Leaflet map?Leaflet SVG layer is obscuring the underlying GeoJSON interactivityFormating GeoJSON file with Leaflet Ajax-pluginHow to add GeoJSON layer with GraphHopper?Use a global GeoJSON layer in LeafletMarkerCluster don't work with geojson layer in leafletHow do I create a geoJSON layer with a div icon instead of the leaflet standard icon?Marker differently depending on the tool with Leaflet.EditableMake GeoJSON easily editableUsing Leaflet Search plugin with GeoJSON layer (L.Control.Search)



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








3















I'm new to Leaflet and the Leaflet.Editable plugin, but I'd like to make GeoJSON layer editable. When I mean "editable", I mean a user can stretch the polygons at will.



Here is a good example of what I'd like.



My current code is as follows:



var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

L.tileLayer('Some Valid Tile Layer',

attribution: 'Myself',
maxZoom: 18
).addTo(map);

$.ajax(

url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
dataType: 'json',
success: function(data)

console.log('The data was received');
L.geoJson(data,

onEachFeature: function(feature, layer)
layer.enableEdit(); // incorrect, but code would go here


).addTo(map);

,

failure: function(data)
console.log('The data wasn't received');


);


I don't fully understand features vs layers, and I fully don't understand leaflet's geometry construction flow, so I'm sure my problem is elementary.










share|improve this question






























    3















    I'm new to Leaflet and the Leaflet.Editable plugin, but I'd like to make GeoJSON layer editable. When I mean "editable", I mean a user can stretch the polygons at will.



    Here is a good example of what I'd like.



    My current code is as follows:



    var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

    L.tileLayer('Some Valid Tile Layer',

    attribution: 'Myself',
    maxZoom: 18
    ).addTo(map);

    $.ajax(

    url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
    dataType: 'json',
    success: function(data)

    console.log('The data was received');
    L.geoJson(data,

    onEachFeature: function(feature, layer)
    layer.enableEdit(); // incorrect, but code would go here


    ).addTo(map);

    ,

    failure: function(data)
    console.log('The data wasn't received');


    );


    I don't fully understand features vs layers, and I fully don't understand leaflet's geometry construction flow, so I'm sure my problem is elementary.










    share|improve this question


























      3












      3








      3








      I'm new to Leaflet and the Leaflet.Editable plugin, but I'd like to make GeoJSON layer editable. When I mean "editable", I mean a user can stretch the polygons at will.



      Here is a good example of what I'd like.



      My current code is as follows:



      var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

      L.tileLayer('Some Valid Tile Layer',

      attribution: 'Myself',
      maxZoom: 18
      ).addTo(map);

      $.ajax(

      url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
      dataType: 'json',
      success: function(data)

      console.log('The data was received');
      L.geoJson(data,

      onEachFeature: function(feature, layer)
      layer.enableEdit(); // incorrect, but code would go here


      ).addTo(map);

      ,

      failure: function(data)
      console.log('The data wasn't received');


      );


      I don't fully understand features vs layers, and I fully don't understand leaflet's geometry construction flow, so I'm sure my problem is elementary.










      share|improve this question
















      I'm new to Leaflet and the Leaflet.Editable plugin, but I'd like to make GeoJSON layer editable. When I mean "editable", I mean a user can stretch the polygons at will.



      Here is a good example of what I'd like.



      My current code is as follows:



      var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

      L.tileLayer('Some Valid Tile Layer',

      attribution: 'Myself',
      maxZoom: 18
      ).addTo(map);

      $.ajax(

      url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
      dataType: 'json',
      success: function(data)

      console.log('The data was received');
      L.geoJson(data,

      onEachFeature: function(feature, layer)
      layer.enableEdit(); // incorrect, but code would go here


      ).addTo(map);

      ,

      failure: function(data)
      console.log('The data wasn't received');


      );


      I don't fully understand features vs layers, and I fully don't understand leaflet's geometry construction flow, so I'm sure my problem is elementary.







      leaflet geojson






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 18 '17 at 21:56









      PolyGeo

      54k1782246




      54k1782246










      asked Apr 18 '17 at 15:12









      Obelisk47Obelisk47

      164




      164




















          3 Answers
          3






          active

          oldest

          votes


















          1














          Try this as your success callback from the $.ajax call:



          success: function(data)
          console.log('The data was received');
          var layer = L.GeoJSON.geometryToLayer(data);
          layer.addTo(map);
          layer.enableEdit();






          share|improve this answer























          • That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

            – Obelisk47
            Apr 19 '17 at 14:09












          • not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

            – toms
            Apr 19 '17 at 15:32












          • can you console.log your data, and then check that it is valid using GeoJSON lint

            – toms
            Apr 19 '17 at 15:33











          • also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

            – toms
            Apr 19 '17 at 15:35











          • My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

            – Obelisk47
            Apr 19 '17 at 15:57


















          0














          I fixed my problem, though I'm not sure if my solution is the most "ideal" way.



          I'm going to give some insight into what I learned and some of this may be wrong, so please let me know so this post can be as accurate as possible.



          The Leaflet.Editable plugin only works consistently with Leaflet Vector Layers. These are the classes of Polyline, Polygon, Rectangle, Circle, and Marker. When you use L.GeoJSON, you're creating a different kind of Layer.



          The solution is to read the GeoJSON file and instead of making a GeoJSON layer, make a Layer of the Vector variety.



          The GeoJSON I used had a type of FeatureCollection. So parse the file and covert each feature into a Polygon class. The code is below



          var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

          L.tileLayer('A Valid Tile Layer',

          attribution: 'Myself',
          maxZoom: 18
          ).addTo(map);

          $.ajax(

          url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
          dataType: 'json',
          success: function(data)

          var latLong = [];
          var thisTime = true;
          data.features.forEach(function(currentFeature)

          currentFeature.geometry.coordinates[0].forEach(function(locationArray)

          locationArray.forEach(function(location)

          latLong.push([location[1] , location[0]]);
          );
          );

          var polygon = L.polygon(latLong).addTo(map);
          polygon.enableEdit();
          latLong = [];
          );
          ,

          failure: function(data)
          console.log('The data wasn't received');


          );


          The following part is necessary because GeoJSON specification requires that coordinates to be in [longitude, latitude] and Leaflet (or OpenStreetMap, can't remember) requires [latitude, and longitude]



           currentFeature.geometry.coordinates[0].forEach(function(locationArray)

          locationArray.forEach(function(location)

          latLong.push([location[1] , location[0]]);
          );
          );


          I had a GeoJSON file of over 250,000 lines, so maybe the plugin works differently for large files, but this solution solved my problem.






          share|improve this answer






























            0














            For future searchers, an alternative solution is to catch the 'edited' event from the editable extension and update the GeoJSON geometry to match that of the layer:



             this.mapHost.map.on('editable:vertex:dragend', (event: any) =>

            // Note: the layer latlngs have been updated here but not the geojson geometry
            // copy changes to geojson
            event.layer.feature.geometry = (event.layer as any).toGeoJSON().geometry;
            );





            share|improve this answer










            New contributor




            Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.




















              Your Answer








              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "79"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f237171%2fmaking-a-geojson-layer-editable-with-the-leaflet-editable-plugin%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              Try this as your success callback from the $.ajax call:



              success: function(data)
              console.log('The data was received');
              var layer = L.GeoJSON.geometryToLayer(data);
              layer.addTo(map);
              layer.enableEdit();






              share|improve this answer























              • That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

                – Obelisk47
                Apr 19 '17 at 14:09












              • not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

                – toms
                Apr 19 '17 at 15:32












              • can you console.log your data, and then check that it is valid using GeoJSON lint

                – toms
                Apr 19 '17 at 15:33











              • also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

                – toms
                Apr 19 '17 at 15:35











              • My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

                – Obelisk47
                Apr 19 '17 at 15:57















              1














              Try this as your success callback from the $.ajax call:



              success: function(data)
              console.log('The data was received');
              var layer = L.GeoJSON.geometryToLayer(data);
              layer.addTo(map);
              layer.enableEdit();






              share|improve this answer























              • That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

                – Obelisk47
                Apr 19 '17 at 14:09












              • not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

                – toms
                Apr 19 '17 at 15:32












              • can you console.log your data, and then check that it is valid using GeoJSON lint

                – toms
                Apr 19 '17 at 15:33











              • also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

                – toms
                Apr 19 '17 at 15:35











              • My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

                – Obelisk47
                Apr 19 '17 at 15:57













              1












              1








              1







              Try this as your success callback from the $.ajax call:



              success: function(data)
              console.log('The data was received');
              var layer = L.GeoJSON.geometryToLayer(data);
              layer.addTo(map);
              layer.enableEdit();






              share|improve this answer













              Try this as your success callback from the $.ajax call:



              success: function(data)
              console.log('The data was received');
              var layer = L.GeoJSON.geometryToLayer(data);
              layer.addTo(map);
              layer.enableEdit();







              share|improve this answer












              share|improve this answer



              share|improve this answer










              answered Apr 19 '17 at 4:20









              tomstoms

              5,31711222




              5,31711222












              • That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

                – Obelisk47
                Apr 19 '17 at 14:09












              • not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

                – toms
                Apr 19 '17 at 15:32












              • can you console.log your data, and then check that it is valid using GeoJSON lint

                – toms
                Apr 19 '17 at 15:33











              • also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

                – toms
                Apr 19 '17 at 15:35











              • My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

                – Obelisk47
                Apr 19 '17 at 15:57

















              • That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

                – Obelisk47
                Apr 19 '17 at 14:09












              • not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

                – toms
                Apr 19 '17 at 15:32












              • can you console.log your data, and then check that it is valid using GeoJSON lint

                – toms
                Apr 19 '17 at 15:33











              • also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

                – toms
                Apr 19 '17 at 15:35











              • My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

                – Obelisk47
                Apr 19 '17 at 15:57
















              That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

              – Obelisk47
              Apr 19 '17 at 14:09






              That's for responding, but when I tried your code it didn't work. I got the following error: Uncaught Error: Invalid GeoJSON object.

              – Obelisk47
              Apr 19 '17 at 14:09














              not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

              – toms
              Apr 19 '17 at 15:32






              not sure, it worked for me with this: "type": "Feature", "properties": "name": "Bermuda Triangle", "area": 1150180 , "geometry": "type": "Polygon", "coordinates": [ [ [-64.73, 32.31], [-80.19, 25.76], [-66.09, 18.43], [-64.73, 32.31] ] ]

              – toms
              Apr 19 '17 at 15:32














              can you console.log your data, and then check that it is valid using GeoJSON lint

              – toms
              Apr 19 '17 at 15:33





              can you console.log your data, and then check that it is valid using GeoJSON lint

              – toms
              Apr 19 '17 at 15:33













              also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

              – toms
              Apr 19 '17 at 15:35





              also you might find some of the discussion in this issue helpful. Different Leaflet plugin, but same issue

              – toms
              Apr 19 '17 at 15:35













              My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

              – Obelisk47
              Apr 19 '17 at 15:57





              My GeoJSON file is about 3 MB and it isn't formatted "nicely". Most validators I find reject it for its size. The link you sent me gave me three outputs: Line 2: Polygons and MultiPolygons should follow the right-hand rule, Line 2: a LinearRing of coordinates needs to have four or more positions, Line 2: old-style crs member is not recommended, this object is equivalent to the default and should be removed. I believe these are irrelevant. The GeoJSON file renders correct and looks like expected, so I know the file is correct.

              – Obelisk47
              Apr 19 '17 at 15:57













              0














              I fixed my problem, though I'm not sure if my solution is the most "ideal" way.



              I'm going to give some insight into what I learned and some of this may be wrong, so please let me know so this post can be as accurate as possible.



              The Leaflet.Editable plugin only works consistently with Leaflet Vector Layers. These are the classes of Polyline, Polygon, Rectangle, Circle, and Marker. When you use L.GeoJSON, you're creating a different kind of Layer.



              The solution is to read the GeoJSON file and instead of making a GeoJSON layer, make a Layer of the Vector variety.



              The GeoJSON I used had a type of FeatureCollection. So parse the file and covert each feature into a Polygon class. The code is below



              var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

              L.tileLayer('A Valid Tile Layer',

              attribution: 'Myself',
              maxZoom: 18
              ).addTo(map);

              $.ajax(

              url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
              dataType: 'json',
              success: function(data)

              var latLong = [];
              var thisTime = true;
              data.features.forEach(function(currentFeature)

              currentFeature.geometry.coordinates[0].forEach(function(locationArray)

              locationArray.forEach(function(location)

              latLong.push([location[1] , location[0]]);
              );
              );

              var polygon = L.polygon(latLong).addTo(map);
              polygon.enableEdit();
              latLong = [];
              );
              ,

              failure: function(data)
              console.log('The data wasn't received');


              );


              The following part is necessary because GeoJSON specification requires that coordinates to be in [longitude, latitude] and Leaflet (or OpenStreetMap, can't remember) requires [latitude, and longitude]



               currentFeature.geometry.coordinates[0].forEach(function(locationArray)

              locationArray.forEach(function(location)

              latLong.push([location[1] , location[0]]);
              );
              );


              I had a GeoJSON file of over 250,000 lines, so maybe the plugin works differently for large files, but this solution solved my problem.






              share|improve this answer



























                0














                I fixed my problem, though I'm not sure if my solution is the most "ideal" way.



                I'm going to give some insight into what I learned and some of this may be wrong, so please let me know so this post can be as accurate as possible.



                The Leaflet.Editable plugin only works consistently with Leaflet Vector Layers. These are the classes of Polyline, Polygon, Rectangle, Circle, and Marker. When you use L.GeoJSON, you're creating a different kind of Layer.



                The solution is to read the GeoJSON file and instead of making a GeoJSON layer, make a Layer of the Vector variety.



                The GeoJSON I used had a type of FeatureCollection. So parse the file and covert each feature into a Polygon class. The code is below



                var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

                L.tileLayer('A Valid Tile Layer',

                attribution: 'Myself',
                maxZoom: 18
                ).addTo(map);

                $.ajax(

                url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
                dataType: 'json',
                success: function(data)

                var latLong = [];
                var thisTime = true;
                data.features.forEach(function(currentFeature)

                currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                locationArray.forEach(function(location)

                latLong.push([location[1] , location[0]]);
                );
                );

                var polygon = L.polygon(latLong).addTo(map);
                polygon.enableEdit();
                latLong = [];
                );
                ,

                failure: function(data)
                console.log('The data wasn't received');


                );


                The following part is necessary because GeoJSON specification requires that coordinates to be in [longitude, latitude] and Leaflet (or OpenStreetMap, can't remember) requires [latitude, and longitude]



                 currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                locationArray.forEach(function(location)

                latLong.push([location[1] , location[0]]);
                );
                );


                I had a GeoJSON file of over 250,000 lines, so maybe the plugin works differently for large files, but this solution solved my problem.






                share|improve this answer

























                  0












                  0








                  0







                  I fixed my problem, though I'm not sure if my solution is the most "ideal" way.



                  I'm going to give some insight into what I learned and some of this may be wrong, so please let me know so this post can be as accurate as possible.



                  The Leaflet.Editable plugin only works consistently with Leaflet Vector Layers. These are the classes of Polyline, Polygon, Rectangle, Circle, and Marker. When you use L.GeoJSON, you're creating a different kind of Layer.



                  The solution is to read the GeoJSON file and instead of making a GeoJSON layer, make a Layer of the Vector variety.



                  The GeoJSON I used had a type of FeatureCollection. So parse the file and covert each feature into a Polygon class. The code is below



                  var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

                  L.tileLayer('A Valid Tile Layer',

                  attribution: 'Myself',
                  maxZoom: 18
                  ).addTo(map);

                  $.ajax(

                  url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
                  dataType: 'json',
                  success: function(data)

                  var latLong = [];
                  var thisTime = true;
                  data.features.forEach(function(currentFeature)

                  currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                  locationArray.forEach(function(location)

                  latLong.push([location[1] , location[0]]);
                  );
                  );

                  var polygon = L.polygon(latLong).addTo(map);
                  polygon.enableEdit();
                  latLong = [];
                  );
                  ,

                  failure: function(data)
                  console.log('The data wasn't received');


                  );


                  The following part is necessary because GeoJSON specification requires that coordinates to be in [longitude, latitude] and Leaflet (or OpenStreetMap, can't remember) requires [latitude, and longitude]



                   currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                  locationArray.forEach(function(location)

                  latLong.push([location[1] , location[0]]);
                  );
                  );


                  I had a GeoJSON file of over 250,000 lines, so maybe the plugin works differently for large files, but this solution solved my problem.






                  share|improve this answer













                  I fixed my problem, though I'm not sure if my solution is the most "ideal" way.



                  I'm going to give some insight into what I learned and some of this may be wrong, so please let me know so this post can be as accurate as possible.



                  The Leaflet.Editable plugin only works consistently with Leaflet Vector Layers. These are the classes of Polyline, Polygon, Rectangle, Circle, and Marker. When you use L.GeoJSON, you're creating a different kind of Layer.



                  The solution is to read the GeoJSON file and instead of making a GeoJSON layer, make a Layer of the Vector variety.



                  The GeoJSON I used had a type of FeatureCollection. So parse the file and covert each feature into a Polygon class. The code is below



                  var map = L.map('mapid', editable: true).setView([39.08344, -77.6497145], 13);

                  L.tileLayer('A Valid Tile Layer',

                  attribution: 'Myself',
                  maxZoom: 18
                  ).addTo(map);

                  $.ajax(

                  url: 'http://127.0.0.1:8000/static/map/geoJSON/elementary_boundaries.geojson',
                  dataType: 'json',
                  success: function(data)

                  var latLong = [];
                  var thisTime = true;
                  data.features.forEach(function(currentFeature)

                  currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                  locationArray.forEach(function(location)

                  latLong.push([location[1] , location[0]]);
                  );
                  );

                  var polygon = L.polygon(latLong).addTo(map);
                  polygon.enableEdit();
                  latLong = [];
                  );
                  ,

                  failure: function(data)
                  console.log('The data wasn't received');


                  );


                  The following part is necessary because GeoJSON specification requires that coordinates to be in [longitude, latitude] and Leaflet (or OpenStreetMap, can't remember) requires [latitude, and longitude]



                   currentFeature.geometry.coordinates[0].forEach(function(locationArray)

                  locationArray.forEach(function(location)

                  latLong.push([location[1] , location[0]]);
                  );
                  );


                  I had a GeoJSON file of over 250,000 lines, so maybe the plugin works differently for large files, but this solution solved my problem.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Apr 20 '17 at 21:19









                  Obelisk47Obelisk47

                  164




                  164





















                      0














                      For future searchers, an alternative solution is to catch the 'edited' event from the editable extension and update the GeoJSON geometry to match that of the layer:



                       this.mapHost.map.on('editable:vertex:dragend', (event: any) =>

                      // Note: the layer latlngs have been updated here but not the geojson geometry
                      // copy changes to geojson
                      event.layer.feature.geometry = (event.layer as any).toGeoJSON().geometry;
                      );





                      share|improve this answer










                      New contributor




                      Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                      Check out our Code of Conduct.
























                        0














                        For future searchers, an alternative solution is to catch the 'edited' event from the editable extension and update the GeoJSON geometry to match that of the layer:



                         this.mapHost.map.on('editable:vertex:dragend', (event: any) =>

                        // Note: the layer latlngs have been updated here but not the geojson geometry
                        // copy changes to geojson
                        event.layer.feature.geometry = (event.layer as any).toGeoJSON().geometry;
                        );





                        share|improve this answer










                        New contributor




                        Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.






















                          0












                          0








                          0







                          For future searchers, an alternative solution is to catch the 'edited' event from the editable extension and update the GeoJSON geometry to match that of the layer:



                           this.mapHost.map.on('editable:vertex:dragend', (event: any) =>

                          // Note: the layer latlngs have been updated here but not the geojson geometry
                          // copy changes to geojson
                          event.layer.feature.geometry = (event.layer as any).toGeoJSON().geometry;
                          );





                          share|improve this answer










                          New contributor




                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.










                          For future searchers, an alternative solution is to catch the 'edited' event from the editable extension and update the GeoJSON geometry to match that of the layer:



                           this.mapHost.map.on('editable:vertex:dragend', (event: any) =>

                          // Note: the layer latlngs have been updated here but not the geojson geometry
                          // copy changes to geojson
                          event.layer.feature.geometry = (event.layer as any).toGeoJSON().geometry;
                          );






                          share|improve this answer










                          New contributor




                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          share|improve this answer



                          share|improve this answer








                          edited Apr 9 at 1:40









                          Vince

                          14.8k32850




                          14.8k32850






                          New contributor




                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.









                          answered Apr 9 at 1:13









                          Geoff McGeoff Mc

                          1




                          1




                          New contributor




                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.





                          New contributor





                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.






                          Geoff Mc is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f237171%2fmaking-a-geojson-layer-editable-with-the-leaflet-editable-plugin%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

                              Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

                              Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given