static int _ogrLoadCell(const char *filename, S52_loadLayer_cb loadLayer_cb, S52_loadObject_cb loadObject_cb) { OGRDataSourceH hDS = NULL;; OGRSFDriverH hDriver = NULL; PRINTF("DEBUG: starting to load cell (%s)\n", filename); hDS = OGROpen(filename, FALSE, &hDriver); if (NULL == hDS) { PRINTF("WARNING: file loading failed (%s)\n", filename); return FALSE; } if (NULL == loadLayer_cb) { PRINTF("ERROR: should be using default S52_loadLayer() callback\n"); g_assert(0); return FALSE; } if (NULL == loadObject_cb) { PRINTF("ERROR: should be using default S52_loadObject_cb() callback\n"); g_assert(0); return FALSE; } //_loadAux(hDS); int nLayer = OGR_DS_GetLayerCount(hDS); for (int iLayer=0; iLayer<nLayer; ++iLayer) { OGRLayerH ogrlayer = OGR_DS_GetLayer(hDS, iLayer); OGRFeatureDefnH defn = OGR_L_GetLayerDefn(ogrlayer); const char *layername = OGR_FD_GetName(defn); #ifdef _MINGW // on Windows 32 the callback is broken S52_loadLayer(layername, ogrlayer, NULL); #else //loadLayer_cb(layername, ogrlayer, NULL); loadLayer_cb(layername, ogrlayer, loadObject_cb); #endif } //OGR_DS_Destroy(hDS); OGRReleaseDataSource(hDS); return TRUE; }
static void gv_S57_layer_setup(GvShapesLayer *layer, GvViewArea *view) // load S57 --its in "wkt" OGC layer format { //printf("start S52 gv_S57_layer_setup\n"); if (NULL==layer || NULL==view) { PRINTF("ERROR: no GvShapesLayer or GvViewArea\n"); return; } #ifdef S52_USE_GLIB2 //g_signal_connect(G_OBJECT(view), "gldraw", // G_CALLBACK(gv_S57_draw_layer), // G_OBJECT(view)); //g_signal_connect(G_OBJECT(layer), "draw", // G_CALLBACK(gv_S57_draw_layer), // G_OBJECT(view)); g_signal_connect(layer, "draw", gv_S57_draw_layer, view); //g_signal_connect(G_OBJECT(view), "button-release-event", // G_CALLBACK(_motion_handle_hint), // G_OBJECT(view)); g_signal_connect(view, "button-release-event", _motion_handle_hint, view); #else gtk_signal_connect_object(GTK_OBJECT(view), "gldraw", GTK_SIGNAL_FUNC(gv_S57_draw_layer), GTK_OBJECT(layer)); gtk_signal_connect_object(GTK_OBJECT(view), "button-release-event", GTK_SIGNAL_FUNC(_motion_handle_hint), GTK_OBJECT(view)); #endif //printf("S52 name gv_S57_layer_setup\n"); //char *name = (char *)gv_data_get_name(GV_DATA(layer)); char *name = (char *)gv_data_get_name(layer); S52_loadLayer(name, (void *)layer); //printf("S52 fini gv_S57_layer_setup\n"); return; }
static void gv_S57_layer_setup(GvShapesLayer *layer, GvViewArea *view) // load S57 --its in "wkt" OGC layer format { //printf("start S52 gv_S57_layer_setup\n"); if (NULL==layer || NULL==view) { PRINTF("ERROR: no GvShapesLayer or GvViewArea\n"); return; } g_signal_connect(layer, "draw", gv_S57_draw_layer, view); g_signal_connect(view, "button-release-event", _motion_handle_hint, view); //printf("S52 name gv_S57_layer_setup\n"); //char *name = (char *)gv_data_get_name(GV_DATA(layer)); char *name = (char *)gv_data_get_name(layer); S52_loadLayer(name, (void *)layer); //printf("S52 fini gv_S57_layer_setup\n"); return; }