Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

problem when extracting Calais, Pau and Saint Nazaire #896

Closed
balglave opened this issue Dec 15, 2023 · 1 comment
Closed

problem when extracting Calais, Pau and Saint Nazaire #896

balglave opened this issue Dec 15, 2023 · 1 comment

Comments

@balglave
Copy link

balglave commented Dec 15, 2023

Hello,
I want to extract the geoclimate data for Calais, Pau and Saint Nazaire but I get errors (I don't have these for other citites).
The codes and the errors are below.
Would you have any idea where it comes from ?
Thanks !

Here is the command I run in the terminal:

groovy geoclimate_with_urban_sprawl.groovy city_name

Here is the script of the groovy code (geoclimate_with_urban_sprawl.groovy):

@GrabResolver(name='orbisgis', root='https://oss.sonatype.org/content/repositories/snapshots/')
@Grab(group='org.orbisgis.geoclimate', module='geoclimate', version='0.0.2-SNAPSHOT')

/**
 *  This script is used to run geoclimate and compute the urban sprawl
 */

import org.orbisgis.geoclimate.osm.OSM
import org.orbisgis.data.H2GIS


String location = args[0]

//Directory to store all the results
String outputDirectory ="/home/balglave/Desktop/Research/geoclimate/res/"


if(!outputDirectory){
    println "The output directory to store the result cannot be null or empty"
}

File dirFile = new File(outputDirectory)
if(!dirFile.exists()){
    println "Create the output directory because it doesn't exist"
    dirFile.mkdir()
}

//Compute the BBOX of the ICU layer

def local_database_name = "geoclimate_sprawl"

def h2gis_db_parameters = [
        "folder": outputDirectory,
        "name"  : "${local_database_name};AUTO_SERVER=TRUE".toString(),
        "delete": false
]

if(!location){
    println("The location value cannot be null")
}

//Create before the local H2GIS database that will be used to compute the BBOX of the area
H2GIS h2GIS = H2GIS.open(h2gis_db_parameters.folder + File.separator + h2gis_db_parameters.name)
if(h2GIS==null){
    println("Cannot create the local H2GIS database")
    return
}

def outputTableNames = runGeoclimate(h2gis_db_parameters, location, outputDirectory )

if(!outputTableNames){
    println("Cannot compute the GeoClimate indicators")
}

def rsu_lcz = outputTableNames.rsu_lcz


//Extract sprawl area
String urbanSprawlH2GIS = computeUrbanSprawl(h2GIS, rsu_lcz )

if(!urbanSprawlH2GIS){
    println("Cannot compute the urban sprawl")
    return
}

//Save the data in a geojson file
h2GIS.save(urbanSprawlH2GIS, outputDirectory+File.separator+"osm_"+location+ File.separator+"urban_sprawl.geojson", true)



/**
 * Run the GeoClimate OSM worflow
 * @param h2gis_db_parameters
 * @param envelope
 * @return
 */
def runGeoclimate(def h2gis_db_parameters, def zone, def outputDirectory) {

    if (!zone) {
        println "The name of the zone to process cannot be null or empty"
    }

/*================================================================================
* Exemple with OSM input areas configuration
*/

    def input = ["locations": [zone], "delete": true, "area": 2800]


/*================================================================================
* Folder to store the results
*/
    def  output  = [
            "folder" : "$outputDirectory"
    ]


/*================================================================================
* WORKFLOW PARAMETERS
*/
    def workflow_parameters = [
            "description" : "Run the Geoclimate chain  and export result to a folder",
            "geoclimatedb": h2gis_db_parameters,
            "input"       : input,
            "output"      : output,
            "parameters"  : [
                    "rsu_indicators"        : [
                            "indicatorUse": ["LCZ"]
                    ], "worldpop_indicators": true
            ]
    ]

    Map process = OSM.workflow(workflow_parameters)
    return process.values().collectEntries()
}

/**
 * Compute the urban sprawl from the LCZ
 *
 * @param outputDirectory
 * @param h2GIS
 * @param lczTableName
 * @param save
 * @return
 */
String computeUrbanSprawl(H2GIS h2GIS, String lczTableName ){

    def mergingLcz = "merging_lcz"

    h2GIS.execute("""
DROP TABLE IF EXISTS $mergingLcz;
CREATE TABLE $mergingLcz as 
select EXPLOD_ID as id_rsu, the_geom from ST_EXPLODE('(
select st_removeholes(st_union(st_accum(the_geom))) as the_geom FROM $lczTableName where  LCZ_PRIMARY IN (1,2,3,4,5,6,7,8,9,10,105))')       
""".toString())

//Create a grid to generalize the urban areas
    h2GIS.execute(""" DROP TABLE IF EXISTS grid;
CREATE TABLE grid as select * from ST_MAKEGRID('$mergingLcz', 100,100);
""".toString())

    h2GIS.createSpatialIndex("grid")
    h2GIS.createSpatialIndex(mergingLcz)

//Compute the percentage by grid
    h2GIS.execute(""" DROP TABLE IF EXISTS grid_lcz, grid_lcz_area, grid_raster;
CREATE TABLE grid_lcz as select st_area(st_intersection(a.the_geom, b.the_geom)) as area, a.id  from grid as a, 
$mergingLcz as b where a.the_geom && b.the_geom and st_intersects(a.the_geom, b.the_geom);
CREATE TABLE grid_lcz_area as select sum(area) as sum_lcz, id from grid_lcz group by id;
CREATE INDEX ON grid_lcz_area (ID);
CREATE INDEX ON grid (ID);
CREATE TABLE grid_raster as select a.id, a.the_geom from grid as a left join grid_lcz_area as b on a.id=b.id where sum_lcz/(100*100) > 0.4
""".toString())


    def urban_sprawl = "urban_sprawl"

    h2GIS.execute("""
DROP TABLE IF EXISTS $urban_sprawl;
CREATE TABLE $urban_sprawl as 
select EXPLOD_ID as id_rsu, the_geom from ST_EXPLODE('(
select st_removeholes(st_union(st_accum(the_geom))) as the_geom FROM grid_raster)')     ;
DROP TABLE IF EXISTS  grid_lcz,  grid_raster, grid, grid_lcz_area, mergingLcz;
""".toString())

    return urban_sprawl
}

Error for Calais:

Caught: java.lang.NullPointerException: Cannot get property 'key' on null object
java.lang.NullPointerException: Cannot get property 'key' on null object
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2$_closure14.doCall(InputDataFormatting.groovy:180)
	at jdk.internal.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.data.jdbc.JdbcDataSource.eachRow(JdbcDataSource.java:522)
	at org.orbisgis.data.jdbc.JdbcDataSource$eachRow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2.doCall(InputDataFormatting.groovy:170)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy:169)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$formatBuildingLayer$2.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$_osm_processing_closure2.doCall(WorkflowOSM.groovy:466)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.osm_processing(WorkflowOSM.groovy:412)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$osm_processing$1.callCurrent(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.workflow(WorkflowOSM.groovy:361)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$workflow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.OSM.workflow(OSM.groovy:49)
	at org.orbisgis.geoclimate.osm.OSM$workflow.call(Unknown Source)
	at geoclimate_with_urban_sprawl.runGeoclimate(geoclimate_with_urban_sprawl.groovy:115)
	at geoclimate_with_urban_sprawl$runGeoclimate.callCurrent(Unknown Source)
	at geoclimate_with_urban_sprawl.run(geoclimate_with_urban_sprawl.groovy:51)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Error for Pau:

Caught: java.lang.NullPointerException: Cannot get property 'key' on null object
java.lang.NullPointerException: Cannot get property 'key' on null object
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2$_closure14.doCall(InputDataFormatting.groovy:180)
	at jdk.internal.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.data.jdbc.JdbcDataSource.eachRow(JdbcDataSource.java:522)
	at org.orbisgis.data.jdbc.JdbcDataSource$eachRow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2.doCall(InputDataFormatting.groovy:170)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy:169)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$formatBuildingLayer$2.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$_osm_processing_closure2.doCall(WorkflowOSM.groovy:466)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.osm_processing(WorkflowOSM.groovy:412)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$osm_processing$1.callCurrent(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.workflow(WorkflowOSM.groovy:361)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$workflow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.OSM.workflow(OSM.groovy:49)
	at org.orbisgis.geoclimate.osm.OSM$workflow.call(Unknown Source)
	at geoclimate_with_urban_sprawl.runGeoclimate(geoclimate_with_urban_sprawl.groovy:115)
	at geoclimate_with_urban_sprawl$runGeoclimate.callCurrent(Unknown Source)
	at geoclimate_with_urban_sprawl.run(geoclimate_with_urban_sprawl.groovy:51)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Error for Saint Nazaire:

Caught: java.lang.NullPointerException: Cannot get property 'key' on null object
java.lang.NullPointerException: Cannot get property 'key' on null object
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2$_closure14.doCall(InputDataFormatting.groovy:180)
	at jdk.internal.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.data.jdbc.JdbcDataSource.eachRow(JdbcDataSource.java:522)
	at org.orbisgis.data.jdbc.JdbcDataSource$eachRow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$_formatBuildingLayer_closure2.doCall(InputDataFormatting.groovy:170)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy:169)
	at org.orbisgis.geoclimate.osm.InputDataFormatting.formatBuildingLayer(InputDataFormatting.groovy)
	at org.orbisgis.geoclimate.osm.InputDataFormatting$formatBuildingLayer$2.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$_osm_processing_closure2.doCall(WorkflowOSM.groovy:466)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.osm_processing(WorkflowOSM.groovy:412)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$osm_processing$1.callCurrent(Unknown Source)
	at org.orbisgis.geoclimate.osm.WorkflowOSM.workflow(WorkflowOSM.groovy:361)
	at org.orbisgis.geoclimate.osm.WorkflowOSM$workflow.call(Unknown Source)
	at org.orbisgis.geoclimate.osm.OSM.workflow(OSM.groovy:49)
	at org.orbisgis.geoclimate.osm.OSM$workflow.call(Unknown Source)
	at geoclimate_with_urban_sprawl.runGeoclimate(geoclimate_with_urban_sprawl.groovy:115)
	at geoclimate_with_urban_sprawl$runGeoclimate.callCurrent(Unknown Source)
	at geoclimate_with_urban_sprawl.run(geoclimate_with_urban_sprawl.groovy:51)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
@ebocher ebocher added this to the GeoClimate 0.0.3 milestone Jan 8, 2024
@ebocher ebocher mentioned this issue Jan 9, 2024
@ebocher
Copy link
Member

ebocher commented Jan 9, 2024

Thanks a lot
Fixed here #902

@ebocher ebocher closed this as completed in c06571d Jan 9, 2024
ebocher added a commit that referenced this issue Jan 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants