Intentando crear una tabla que muestre si la latitud y la longitud están dentro de un polígono GeoJSON

Un usuario Pregunto ✅

mattyj2009

Buenas tardes,

Tengo un archivo que se exporta desde uno de nuestros sistemas que tiene las columnas de Dirección, Latitud y Longitud. Luego tenemos un archivo GeoJSON que tiene los límites de varias áreas de servicio. Lo que queremos lograr es extraer (como una columna) el nombre del área de servicio del archivo GeoJSON.

Entonces, el objetivo final sería tener una tabla que incluyera la dirección, la latitud, la longitud y el nombre del área de servicio.

Nuestro archivo GeoJSON tendría información como la siguiente. Quisiéramos extraer el campo de nombre para que, en los ejemplos a continuación, Downtown y East Roam, si la dirección está dentro de la forma del polígono.

[  
   {  
      "id":1,
      "campaign_id":2,
      "name":"Downtown",
      "zone_type":"in_service",
      "people_goal":38,
      "zone_color":"#008000",
      "notes": "Notes for the Downtown Zone",
      "is_subzone":false,
      "parent_zone_id":null,
      "geojson":[  
         {  
            "type":"Feature",
            "properties":{  
               "id":1,
               "zone_name":"Downtown",
               "lg_id":34,
               "color":"#008000"
            },
            "geometry":{  
               "type":"Polygon",
               "coordinates":[  
                  [  
                     [  
                        -85.17772674676962,
                        34.25390581369373
                     ],
                     [  
                        -85.17626762506552,
                        34.251706537253966
                     ],
                     [  
                        -85.17695427057333,
                        34.248655832831254
                     ],
                     [  
                        -85.17618179437704,
                        34.247591607594714
                     ]
                  ]
               ]
            }
         }
      ]
   },
   {  
      "id":3,
      "campaign_id":2,
      "name":"East Rome",
      "zone_type":"extended",
      "people_goal":6,
      "zone_color":"#008000",
      "notes":"",
      "is_subzone":false,
      "parent_zone_id":null,
      "geojson":[  
         {  
            "type":"Feature",
            "properties":{  
               "id":3,
               "zone_name":"East Rome",
               "lg_id":37,
               "color":"#008000"
            },
            "geometry":{  
               "type":"Polygon",
               "coordinates":[  
                  [  
                     [  
                        -85.12825012207034,
                        34.25409499535699
                     ],
                     [  
                        -85.1257610321045,
                        34.25356291881514
                     ],
                     [  
                        -85.12086868286134,
                        34.25494631082515
                     ],
                     [  
                        -85.11108398437501,
                        34.23976322547396
                     ],
                     [  
                        -85.15262603759767,
                        34.261898398047876
                     ],
                     [  
                        -85.12825012207034,
                        34.25409499535699
                     ]
                  ]
               ]
            }
         }
      ]
   }
]

Hola, @mattyj2009

A través de las operaciones en el editor de consultas de Power, solo puedo obtener una tabla que contiene la latitud y la longitud, por lo que creo que debe crear una tabla para East Rome y Downtown.

Para la tabla ‘Roma’, puede probar este M-Query:

let

    Source = Json.Document(File.Contents("C: Desktopgeojson.json")),

    Source1 = Source{1},

    geojson = Source1[geojson],

    geojson1 = geojson{0},

    geometry = geojson1[geometry],

    coordinates = geometry[coordinates],

    coordinates1 = coordinates{0},

    #"Converted to Table" = Table.FromList(coordinates1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),

    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),

    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type number}, {"Column1.2", type number}})

in

    #"Changed Type"

Para la tabla ‘Downtown’, puede probar este M-Query:

let

    Source = Json.Document(File.Contents("C: Desktopgeojson.json")),

    Source1 = Source{0},

    geojson1 = Source1[geojson],

    geojson2 = geojson1{0},

    geometry = geojson2[geometry],

    coordinates = geometry[coordinates],

    coordinates1 = coordinates{0},

    #"Converted to Table" = Table.FromList(coordinates1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),

    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),

    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type number}, {"Column1.2", type number}})

in

    #"Changed Type"

Luego puede crear un gráfico de mapa tanto para ‘Roma’ como para ‘Downtown’, así:

v-robertq-msft_0-1602726649311.png

Si esto no es lo que desea, responda y muestre el resultado esperado en una tabla o gráfico.

Atentamente,

Equipo de apoyo comunitario _Robert Qin

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola, @mattyj2009

A través de las operaciones en el editor de consultas de Power, solo puedo obtener una tabla que contiene la latitud y la longitud, por lo que creo que debe crear una tabla para East Rome y Downtown.

Para la tabla ‘Roma’, puede probar este M-Query:

let

    Source = Json.Document(File.Contents("C: Desktopgeojson.json")),

    Source1 = Source{1},

    geojson = Source1[geojson],

    geojson1 = geojson{0},

    geometry = geojson1[geometry],

    coordinates = geometry[coordinates],

    coordinates1 = coordinates{0},

    #"Converted to Table" = Table.FromList(coordinates1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),

    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),

    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type number}, {"Column1.2", type number}})

in

    #"Changed Type"

Para la tabla ‘Downtown’, puede probar este M-Query:

let

    Source = Json.Document(File.Contents("C: Desktopgeojson.json")),

    Source1 = Source{0},

    geojson1 = Source1[geojson],

    geojson2 = geojson1{0},

    geometry = geojson2[geometry],

    coordinates = geometry[coordinates],

    coordinates1 = coordinates{0},

    #"Converted to Table" = Table.FromList(coordinates1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),

    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2"}),

    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type number}, {"Column1.2", type number}})

in

    #"Changed Type"

Luego puede crear un gráfico de mapa tanto para ‘Roma’ como para ‘Downtown’, así:

v-robertq-msft_0-1602726649311.png

Si esto no es lo que desea, responda y muestre el resultado esperado en una tabla o gráfico.

Atentamente,

Equipo de apoyo comunitario _Robert Qin

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

mattyj2009

En respuesta a v-robertq-msft

Así que tengo una tabla que se exporta desde nuestro sistema. Tengo algunos datos de muestra a continuación (antes de cualquier modificación).

identificación lat largo número predirección nombre de la calle tipo de calle
331 39.904722 -91.366863 1201 Principal
4334 39.817275 -91.392727 3935 Maestros Cra
4790 39.80445043 -91.36748135 1221 Unión
5165 39.810623 -91.356699 205 norte Principal S t
6376 39.775113 -91.403285 4121 Mercado S t
7487 39.839117 -92.484838 908 W Bourke S t
7594 39.812558 -91.368877 1201 lyon S t
9462 39.907396 -93.083227 1701 norte Expresar S t
15900 39.709727 -92.938642 27591 Morton Calle
16245 39.80383696 -92.95601428 26804 Pino Calle
20492 39.773696 -92.941444 30736 Carretera 15

Básicamente, lo que queremos lograr es poner el nombre del área dentro de la cual se encuentran la latitud y la longitud y, si no se encuentra dentro de ninguno de los polígonos en el archivo GeoJSON, déjelo en blanco (nulo).

identificación lat largo número predirección nombre de la calle tipo de calle nombre
331 39.904722 -91.366863 1201 Principal Centro
4334 39.817275 -91.392727 3935 Maestros Cra Centro
4790 39.80445043 -91.36748135 1221 Unión Roma oriental
5165 39.810623 -91.356699 205 norte Principal S t Roma oriental
6376 39.775113 -91.403285 4121 Mercado S t nulo
7487 39.839117 -92.484838 908 W Bourke S t nulo
7594 39.812558 -91.368877 1201 lyon S t Roma oriental
9462 39.907396 -93.083227 1701 norte Expresar S t Centro
15900 39.709727 -92.938642 27591 Morton Calle nulo
16245 39.80383696 -92.95601428 26804 Pino Calle nulo
20492 39.773696 -92.941444 30736 Carretera 15 nulo

Los datos anteriores son datos de muestra y sé que ninguno de los puntos no está dentro de East Rome o Downtown, pero se completa con fines de muestra.

En respuesta a mattyj2009

Hola, @mattyj2009

Desafortunadamente, supongo que no puedo obtener el resultado esperado, pero aquí hay algunos blogs que coinciden bien con este caso. Puedes echar un vistazo:

https://docs.oracle.com/en/database/oracle/oracle-database/19/adjsn/using-GeoJSON-geographic-data.ht…

https://radacad.com/how-to-do-power-bi-mapping-with-latitude-and-longitude-only

Atentamente,

Equipo de apoyo comunitario _Robert Qin

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *