📄 mitabc_test.c
字号:
/********************************************************************** * $Id: mitabc_test.c,v 1.12 2003/01/18 21:44:33 daniel Exp $ * * Name: mitabc_test.c * Project: MapInfo TAB Read/Write library * Language: C * Purpose: Test mainline for MITAB C API. * Author: Frank Warmerdam, warmerda@home.com * ********************************************************************** * Copyright (c) 2000-2003, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ********************************************************************** * * $Log: mitabc_test.c,v $ * Revision 1.12 2003/01/18 21:44:33 daniel * Added 'indexed' and 'unique' parameters to mitab_c_add_field(). * * Revision 1.11 2003/01/18 20:43:31 daniel * Added support for writing NONE geometries via the C API * * Revision 1.10 2002/05/16 14:13:44 julien * Add test for MultiPoint and Region with MultiPolygon * * Revision 1.9 2001/12/17 16:08:22 warmerda * added a bit of error reporting * * Revision 1.8 2000/10/03 20:43:36 daniel * Added support for writing arcs,ellipses and rectangles in C API * * Revision 1.7 2000/04/21 12:53:41 daniel * Added funcs to fetch feature coordinates and attributes * * Revision 1.6 2000/02/28 17:20:34 daniel * Removed style param to mitab_c_set_pen() since this param is actually * used inside the format to define pen width in points (version 450) * * Revision 1.5 2000/01/15 22:37:02 daniel * Switch to MIT/X-Consortium OpenSource license * * Revision 1.4 2000/01/14 21:58:40 warmerda * added error handling * * Revision 1.3 2000/01/14 17:12:20 warmerda * Added some include files. * * Revision 1.2 2000/01/14 16:33:24 warmerda * initial implementation complete * * Revision 1.1 2000/01/14 14:53:59 warmerda * New * */#include <stdio.h>#include <assert.h>#include <string.h>#include <stdlib.h>#include "mitab_capi.h"#ifndef NULL# define NULL 0#endif/************************************************************************//* ReportFile *//************************************************************************/static void ReportFile( const char * pszFilename ){ mitab_handle dataset; int feature_id, num_fields; dataset = mitab_c_open( pszFilename ); if( dataset == NULL ) { printf( "mitab_c_open(%s) failed.\n%s\n", pszFilename, mitab_c_getlasterrormsg() ); exit( 1 ); } num_fields = mitab_c_get_field_count(dataset); for( feature_id = mitab_c_next_feature_id(dataset,-1); feature_id != -1; feature_id = mitab_c_next_feature_id(dataset,feature_id) ) { mitab_feature feature; int feature_type, num_parts, partno, pointno, fieldno;/* -------------------------------------------------------------------- *//* Read next feature object *//* -------------------------------------------------------------------- */ feature = mitab_c_read_feature( dataset, feature_id ); if( feature == NULL ) { printf( "Failed to read feature %d.\n%s\n", feature_id, mitab_c_getlasterrormsg() ); exit( 1 ); } feature_type = mitab_c_get_type(feature); num_parts = mitab_c_get_parts(feature); printf( "Read feature %d: type=%d, num_parts=%d.\n", feature_id, feature_type, num_parts );/* -------------------------------------------------------------------- *//* Dump the feature attributes... *//* -------------------------------------------------------------------- */ for(fieldno = 0; fieldno < num_fields; fieldno++) { printf(" %s = %s\n", mitab_c_get_field_name(dataset, fieldno), mitab_c_get_field_as_string(feature, fieldno) ); }/* -------------------------------------------------------------------- *//* ... and coordinates. *//* In real applications, we would probably want to handle each *//* object type differently but we won't do it here. *//* -------------------------------------------------------------------- */ for(partno = 0; partno < num_parts; partno++) { int num_points = mitab_c_get_vertex_count(feature, partno); if (num_parts > 1) printf(" Part no %d:\n", partno); for(pointno = 0; pointno < num_points; pointno++) { double dX, dY; dX = mitab_c_get_vertex_x(feature, partno, pointno); dY = mitab_c_get_vertex_y(feature, partno, pointno); printf(" %.16g %.16g\n", dX, dY); } } mitab_c_destroy_feature( feature ); } mitab_c_close( dataset ); if( mitab_c_getlasterrormsg() != NULL && strlen(mitab_c_getlasterrormsg()) > 0 ) fprintf( stderr, "Last Error: %s\n", mitab_c_getlasterrormsg() );}/************************************************************************//* CopyFile() *//************************************************************************/static void CopyFile( const char * pszSource, const char * pszDest ){ fprintf( stderr, "Copy File not implemented at this time.\n" );}/************************************************************************//* WriteFile() *//************************************************************************/static void WriteFile( const char * pszDest, const char * pszMifOrTab ){ mitab_handle dataset; mitab_feature feature; double x[100], y[100]; int field_index; dataset = mitab_c_create( pszDest, pszMifOrTab, "CoordSys Earth Projection 1, 0", 90, 0, 180, -180 ); if( dataset == NULL ) { printf( "Failed to create %s file %s.\n%s\n", pszMifOrTab, pszDest, mitab_c_getlasterrormsg() ); return; }/* -------------------------------------------------------------------- *//* Add a text, float and integer field. *//* -------------------------------------------------------------------- */ field_index = mitab_c_add_field( dataset, "TestInt", TABFT_Integer, 8, 0, 1, 0 ); /* Indexed */ assert( field_index == 0 ); field_index = mitab_c_add_field( dataset, "TestFloat", TABFT_Float, 12, 2, 0, 0 ); assert( field_index == 1 ); field_index = mitab_c_add_field( dataset, "TestString", TABFT_Char, 10, 0, 0, 0 ); assert( field_index == 2 );/* -------------------------------------------------------------------- *//* Write a NONE feature (attributes only with no geometry) *//* -------------------------------------------------------------------- */ feature = mitab_c_create_feature( dataset, TABFC_NoGeom ); mitab_c_set_field( feature, 0, "42" ); mitab_c_set_field( feature, 1, "123.45" ); mitab_c_set_field( feature, 2, "" ); mitab_c_write_feature( dataset, feature ); mitab_c_destroy_feature( feature );/* -------------------------------------------------------------------- *//* Write a point. *//* -------------------------------------------------------------------- */ feature = mitab_c_create_feature( dataset, TABFC_Point ); x[0] = 98; y[0] = 50; mitab_c_set_points( feature, 0, 1, x, y ); mitab_c_set_symbol( feature, 41, 15, 255*256 ); mitab_c_set_field( feature, 0, "100" ); mitab_c_set_field( feature, 1, "100.5" ); mitab_c_set_field( feature, 2, "12345678901234567890" ); mitab_c_write_feature( dataset, feature ); mitab_c_destroy_feature( feature );/* -------------------------------------------------------------------- *//* Write a MultiPoint. *//* -------------------------------------------------------------------- */ feature = mitab_c_create_feature( dataset, TABFC_MultiPoint ); x[0] = 90; y[0] = 51; x[1] = 90.5; y[1] = 51.5; x[2] = 91; y[2] = 52; mitab_c_set_points( feature, 0, 3, x, y ); mitab_c_set_symbol( feature, 41, 15, 255*256 ); mitab_c_set_field( feature, 0, "100" ); mitab_c_set_field( feature, 1, "100.5" ); mitab_c_set_field( feature, 2, "12345678901234567890" ); mitab_c_write_feature( dataset, feature ); mitab_c_destroy_feature( feature );/* -------------------------------------------------------------------- *//* Write a line. *//* -------------------------------------------------------------------- */ feature = mitab_c_create_feature( dataset, TABFC_Polyline ); x[0] = 100;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -