Wednesday, 25 December 2019

Calculate the midpoint of JSON polylines (Python 2.7.0, no libraries)

Scenario:

I have a system that makes a request to a web service.

  • The web service returns a JSON object.
  • The JSON object contains polyline vertices in an array.

A small snippet from the JSON object would be:

{
  "objectIdFieldName": "OBJECTID",
  "globalIdFieldName": "",
  "geometryType": "esriGeometryPolyline",
  "spatialReference": {
    "wkid": 476,
    "latestWkid": 476
  },
  "fields": [
    {
      "name": "OBJECTID",
      "alias": "OBJECTID",
      "type": "esriFieldTypeOID"
    }
  ],
  "features": [
    {
      "attributes": {
        "OBJECTID": 3311
      },
      "geometry": {
        "paths": [
          [
            [
              675844.1562959617,
              4861766.9811610579
            ],
            [
              675878.30397594348,
              4861792.5977392439
            ],
            [
              675891.38832408097,
              4861800.4024024364
            ],
            [
              675902.17710777745,
              4861804.9933949765
            ],
            [
              675912.27726199664,
              4861808.2070551421
            ],
            [
              675923.52513550781,
              4861810.2730065044
            ],
            [
              675934.77300901897,
              4861811.1911861338
            ],
            [
              675943.03676202707,
              4861811.1911861338
            ],
            [
              675951.07095439639,
              4861810.502546167
            ],
            [
              675961.17111910321,
              4861808.6661449578
            ],
            [
              675970.35304125212,
              4861806.1411667075
            ],
            [
              675981.51595173683,
              4861800.7007851209
            ],
            [
              675998.03647276573,
              4861792.2469376959
            ]
          ]
        ]
      }
    },

**The JSON object has been cut off.**

The full JSON object can be found here: JSON Polylines


Question:

Using the JSON vertices, I would like to calculate the midpoints of the polylines (see green dots below):

  • Some of the lines (OBJECTIDs 3716 and 3385) are multi-part. In this case, the midpoint should only be generated for the longest part of the line (not the other parts).
  • For the purpose of solving this problem, the JSON text could be saved as a text file, and loaded into the python script. In this case, Python's JSON library could be used--despite the catch that is mentioned below.

enter image description here


The output would look like this (the formatting can be different):

OBJECTID  MIDPOINT_X    MIDPOINT_Y
2165      676163.9343   4861476.373
2320      676142.0017   4861959.66
2375      676118.1226   4861730.258
2682      676060.3917   4861904.762
2683      675743.1666   4861724.081
2691      676137.4796   4861557.709
3311      675916.9815   4861809.071
3385      676208.669    4861536.555
3546      676262.2623   4861665.146
3547      676167.5738   4861612.699
3548      676021.3677   4861573.141
3549      675914.4334   4861669.87
3550      675866.6003   4861735.572
3551      675800.1232   4861827.482
3552      675681.9432   4861918.989
3716      675979.6493   4861724.323

The Catch:

This would need to be done in Python 2.7.0 -- since my system uses Jython 2.7.0.

  • It's important to note that I can't import any Python libraries into the Jython implementation in the system that I'm using. So, unfortunately, the script should not import any python libraries (other than the JSON library for testing).

Is it possible to calculate the midpoints of a JSON polylines using Python 2.7.0 (without importing libraries)?



from Calculate the midpoint of JSON polylines (Python 2.7.0, no libraries)

No comments:

Post a Comment