亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pj_init.c

?? 開源投影系統 Cartographic Projections library originally written by Gerald Evenden then of the USGS. The
?? C
字號:
/****************************************************************************** * $Id: pj_init.c,v 1.10 2003/03/16 16:38:24 warmerda Exp $ * * Project:  PROJ.4 * Purpose:  Initialize projection object from string definition.  Includes *           pj_init(), pj_init_plus() and pj_free() function. * Author:   Gerald Evenden, Frank Warmerdam <warmerdam@pobox.com> * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> * * 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: pj_init.c,v $ * Revision 1.10  2003/03/16 16:38:24  warmerda * Modified get_opt() to terminate reading the definition when a new * definition (a word starting with '<') is encountered, in addition to when * the definition terminator '<>' is encountered, so that unterminated * definitions like those in the distributed esri file will work properly. * http://bugzilla.remotesensing.org/show_bug.cgi?id=302 * * Revision 1.9  2002/12/14 20:15:02  warmerda * added geocentric support, updated headers * */#define PJ_LIB__#include <projects.h>#include <stdio.h>#include <string.h>#include <errno.h>PJ_CVSID("$Id: pj_init.c,v 1.10 2003/03/16 16:38:24 warmerda Exp $");static paralist *start;extern FILE *pj_open_lib(char *, char *);/************************************************************************//*                              get_opt()                               *//************************************************************************/static paralist *get_opt(FILE *fid, char *name, paralist *next) {    char sword[52], *word = sword+1;    int first = 1, len, c;    len = strlen(name);    *sword = 't';    while (fscanf(fid, "%50s", word) == 1) {        if (*word == '#') /* skip comments */            while((c = fgetc(fid)) != EOF && c != '\n') ;        else if (*word == '<') { /* control name */            if (first && !strncmp(name, word + 1, len)                && word[len + 1] == '>')                first = 0;            else if (!first && *word == '<') {                while((c = fgetc(fid)) != EOF && c != '\n') ;                break;            }        } else if (!first && !pj_param(start, sword).i) {            /* don't default ellipse if datum is set */            if( strncmp(word,"ellps=",6) != 0                 || !pj_param(start, "tdatum").i )            {                next = next->next = pj_mkparam(word);            }        }    }    if (errno == 25)        errno = 0;    return next;}/************************************************************************//*                            get_defaults()                            *//************************************************************************/static paralist *get_defaults(paralist *next, char *name) {	FILE *fid;	if (fid = pj_open_lib("proj_def.dat", "rt")) {		next = get_opt(fid, "general", next);		rewind(fid);		next = get_opt(fid, name, next);		(void)fclose(fid);	}	if (errno)		errno = 0; /* don't care if can't open file */	return next;}/************************************************************************//*                              get_init()                              *//************************************************************************/static paralist *get_init(paralist *next, char *name) {	char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt;	FILE *fid;	(void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1);	if (opt = strrchr(fname, ':'))		*opt++ = '\0';	else { pj_errno = -3; return(0); }	if (fid = pj_open_lib(fname, "rt"))		next = get_opt(fid, opt, next);	else		return(0);	(void)fclose(fid);	if (errno == 25)		errno = 0; /* unknown problem with some sys errno<-25 */	return next;}/************************************************************************//*                            pj_init_plus()                            *//*                                                                      *//*      Same as pj_init() except it takes one argument string with      *//*      individual arguments preceeded by '+', such as "+proj=utm       *//*      +zone=11 +ellps=WGS84".                                         *//************************************************************************/PJ *pj_init_plus( const char *definition ){#define MAX_ARG 200    char	*argv[MAX_ARG];    char	*defn_copy;    int		argc = 0, i;    PJ	        *result;        /* make a copy that we can manipulate */    defn_copy = (char *) pj_malloc( strlen(definition)+1 );    strcpy( defn_copy, definition );    /* split into arguments based on '+' and trim white space */    for( i = 0; defn_copy[i] != '\0'; i++ )    {        switch( defn_copy[i] )        {          case '+':            if( argc+1 == MAX_ARG )            {                pj_errno = -44;                return NULL;            }            argv[argc++] = defn_copy + i + 1;            break;          case ' ':          case '\t':          case '\n':            defn_copy[i] = '\0';            break;          default:            /* do nothing */;        }    }    /* perform actual initialization */    result = pj_init( argc, argv );    pj_dalloc( defn_copy );    return result;}/************************************************************************//*                              pj_init()                               *//*                                                                      *//*      Main entry point for initialing a PJ projections                *//*      definition.  Note that the projection specific function is      *//*      called to do the initial allocation so it can be created        *//*      large enough to hold projection specific parameters.            *//************************************************************************/PJ *pj_init(int argc, char **argv) {	char *s, *name;	PJ *(*proj)(PJ *);	paralist *curr;	int i;	PJ *PIN = 0;	errno = pj_errno = 0;	/* put arguments into internal linked list */	if (argc <= 0) { pj_errno = -1; goto bum_call; }	for (i = 0; i < argc; ++i)		if (i)			curr = curr->next = pj_mkparam(argv[i]);		else			start = curr = pj_mkparam(argv[i]);	if (pj_errno) goto bum_call;	/* check if +init present */	if (pj_param(start, "tinit").i) {		paralist *last = curr;		if (!(curr = get_init(curr, pj_param(start, "sinit").s)))			goto bum_call;		if (curr == last) { pj_errno = -2; goto bum_call; }	}	/* find projection selection */	if (!(name = pj_param(start, "sproj").s))		{ pj_errno = -4; goto bum_call; }	for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ;	if (!s) { pj_errno = -5; goto bum_call; }	/* set defaults, unless inhibited */	if (!pj_param(start, "bno_defs").i)		curr = get_defaults(curr, name);	proj = (PJ *(*)(PJ *)) pj_list[i].proj;	/* allocate projection structure */	if (!(PIN = (*proj)(0))) goto bum_call;	PIN->params = start;        PIN->is_latlong = 0;        PIN->is_geocent = 0;        /* set datum parameters */        if (pj_datum_set(start, PIN)) goto bum_call;	/* set ellipsoid/sphere parameters */	if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call;	PIN->e = sqrt(PIN->es);	PIN->ra = 1. / PIN->a;	PIN->one_es = 1. - PIN->es;	if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; }	PIN->rone_es = 1./PIN->one_es;        /* Now that we have ellipse information check for WGS84 datum */        if( PIN->datum_type == PJD_3PARAM             && PIN->datum_params[0] == 0.0            && PIN->datum_params[1] == 0.0            && PIN->datum_params[2] == 0.0            && PIN->a == 6378137.0            && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/        {            PIN->datum_type = PJD_WGS84;        }        	/* set PIN->geoc coordinate system */	PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i);	/* over-ranging flag */	PIN->over = pj_param(start, "bover").i;	/* central meridian */	PIN->lam0=pj_param(start, "rlon_0").f;	/* central latitude */	PIN->phi0 = pj_param(start, "rlat_0").f;	/* false easting and northing */	PIN->x0 = pj_param(start, "dx_0").f;	PIN->y0 = pj_param(start, "dy_0").f;	/* general scaling factor */	if (pj_param(start, "tk_0").i)		PIN->k0 = pj_param(start, "dk_0").f;	else if (pj_param(start, "tk").i)		PIN->k0 = pj_param(start, "dk").f;	else		PIN->k0 = 1.;	if (PIN->k0 <= 0.) {		pj_errno = -31;		goto bum_call;	}	/* set units */	s = 0;	if (name = pj_param(start, "sunits").s) { 		for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ;		if (!s) { pj_errno = -7; goto bum_call; }		s = pj_units[i].to_meter;	}	if (s || (s = pj_param(start, "sto_meter").s)) {		PIN->to_meter = strtod(s, &s);		if (*s == '/') /* ratio number */			PIN->to_meter /= strtod(++s, 0);		PIN->fr_meter = 1. / PIN->to_meter;	} else		PIN->to_meter = PIN->fr_meter = 1.;	/* prime meridian */	s = 0;	if (name = pj_param(start, "spm").s) {             const char *value = NULL;            char *next_str = NULL;            for (i = 0; pj_prime_meridians[i].id != NULL; ++i )            {                if( strcmp(name,pj_prime_meridians[i].id) == 0 )                {                    value = pj_prime_meridians[i].defn;                    break;                }            }                        if( value == NULL                 && dmstor(name,&next_str) != 0.0                 && *next_str == '\0' )                value = name;            if (!value) { pj_errno = -7; goto bum_call; }            PIN->from_greenwich = dmstor(value,NULL);	}        else            PIN->from_greenwich = 0.0;	/* projection specific initialization */	if (!(PIN = (*proj)(PIN)) || errno || pj_errno) {bum_call: /* cleanup error return */		if (!pj_errno)			pj_errno = errno;		if (PIN)			pj_free(PIN);		else			for ( ; start; start = curr) {				curr = start->next;				pj_dalloc(start);			}		PIN = 0;	}	return PIN;}/************************************************************************//*                              pj_free()                               *//*                                                                      *//*      This is the application callable entry point for destroying     *//*      a projection definition.  It does work generic to all           *//*      projection types, and then calls the projection specific        *//*      free function (P->pfree()) to do local work.  This maps to      *//*      the FREEUP code in the individual projection source files.      *//************************************************************************/voidpj_free(PJ *P) {	if (P) {		paralist *t = P->params, *n;		/* free parameter list elements */		for (t = P->params; t; t = n) {			n = t->next;			pj_dalloc(t);		}		/* free projection parameters */		P->pfree(P);	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月婷婷欧美视频| 欧美网站大全在线观看| 91看片淫黄大片一级在线观看| 欧美日韩在线三级| 国产精品国产自产拍高清av王其 | 欧美日韩一区高清| 国产精品网站在线观看| 激情综合色综合久久| 91久久精品一区二区三| 欧美国产一区二区在线观看| 天天操天天干天天综合网| jizzjizzjizz欧美| 欧美高清在线视频| 激情六月婷婷综合| 欧美一区二区三区在线看| 亚洲欧美激情小说另类| 国产91丝袜在线18| 久久综合九色欧美综合狠狠| 日韩精品每日更新| 欧美视频一区二区三区四区| 日韩理论片一区二区| 国产成人综合在线观看| 精品成a人在线观看| 日本中文字幕一区二区有限公司| 91官网在线观看| 亚洲欧美日韩综合aⅴ视频| 成人av免费在线| 国产情人综合久久777777| 91福利在线看| 亚洲丝袜制服诱惑| 99久久777色| 亚洲精品国产品国语在线app| 成人久久视频在线观看| 欧美激情一区三区| 99视频精品全部免费在线| 日韩毛片在线免费观看| 色噜噜狠狠一区二区三区果冻| 中文字幕亚洲成人| 91香蕉视频mp4| 亚洲综合图片区| 欧美日韩国产小视频在线观看| 亚洲成人在线网站| 日韩精品一区二区在线| 久久精品99国产国产精| 久久午夜电影网| www.亚洲免费av| 亚洲最色的网站| 欧美久久久久久蜜桃| 美女一区二区三区| 国产日韩精品一区| 色婷婷久久久久swag精品 | 91麻豆免费视频| 亚洲精品国产视频| 91精品国模一区二区三区| 美女视频免费一区| 国产精品久久国产精麻豆99网站| 成av人片一区二区| 午夜影视日本亚洲欧洲精品| 91精品国产91综合久久蜜臀| 国产一区 二区| 亚洲欧美日本韩国| 欧美成人r级一区二区三区| 成人精品在线视频观看| 亚洲精品视频在线观看网站| 91精品国产丝袜白色高跟鞋| 国产一区二区三区观看| 樱花草国产18久久久久| 日韩精品一区在线观看| 91色|porny| 久久精品国产亚洲a| 中文字幕在线不卡视频| 日韩欧美一级特黄在线播放| 97久久久精品综合88久久| 奇米精品一区二区三区在线观看一| 久久久国产综合精品女国产盗摄| 99精品久久99久久久久| 久久成人久久爱| 亚洲国产日韩综合久久精品| 久久影视一区二区| 欧美日韩亚洲综合一区二区三区| 国产原创一区二区| 亚洲成人激情综合网| 国产精品天天摸av网| 91精品国产欧美一区二区成人| 不卡的av在线| 国产中文字幕精品| 婷婷中文字幕一区三区| 亚洲欧洲av一区二区三区久久| 日韩一级成人av| 欧美在线观看你懂的| av电影在线不卡| 国产伦理精品不卡| 美腿丝袜一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 国产欧美一区二区三区网站| 一区二区三区四区国产精品| 国产欧美日韩在线看| 精品成人一区二区三区| 欧美大片在线观看一区| 欧美精品一二三四| 欧美在线观看视频一区二区| 97se亚洲国产综合自在线不卡 | 欧美一级欧美三级在线观看| 91蝌蚪porny| 91在线无精精品入口| 成人黄色在线视频| 国产不卡视频一区| 国产福利一区二区三区| 国产老妇另类xxxxx| 精品亚洲成a人在线观看| 日本一区中文字幕| 麻豆极品一区二区三区| 青椒成人免费视频| 美女一区二区在线观看| 狠狠色丁香婷综合久久| 国模一区二区三区白浆| 激情图区综合网| 国产成人精品免费| 成人少妇影院yyyy| av影院午夜一区| 色综合久久99| 欧美久久久一区| 欧美成人性战久久| 国产欧美一区二区三区在线老狼| 欧美极品aⅴ影院| 亚洲女性喷水在线观看一区| 亚洲人成网站影音先锋播放| 有坂深雪av一区二区精品| 亚洲综合在线电影| 日韩中文字幕区一区有砖一区| 日韩不卡一二三区| 国产一区二区不卡在线| 成人综合婷婷国产精品久久蜜臀 | 欧美理论片在线| 欧美成人精品福利| 欧美激情一区二区三区全黄| 中文字幕一区av| 亚洲国产成人91porn| 日韩电影在线观看网站| 国产99精品视频| 在线免费观看日韩欧美| 日韩视频中午一区| 国产精品久久久久久福利一牛影视 | 国产精品久久久久久久午夜片| 亚洲日本免费电影| 美国毛片一区二区| eeuss鲁一区二区三区| 欧美精品一二三四| 中文av一区特黄| 性做久久久久久| 国产激情偷乱视频一区二区三区| 91免费精品国自产拍在线不卡| 欧美夫妻性生活| 成人免费一区二区三区在线观看| 亚洲超碰97人人做人人爱| 国产精品正在播放| 欧美色国产精品| 国产欧美日韩视频一区二区 | 欧美午夜在线观看| 久久在线观看免费| 亚洲电影一区二区| 成人综合在线观看| 欧美一区二区福利视频| 亚洲男人的天堂av| 国产电影一区二区三区| 欧美日韩在线播放| 国产精品亚洲视频| 欧美日韩中文精品| 亚洲丝袜另类动漫二区| 国产电影精品久久禁18| 欧美一区二区三级| 亚洲一区二区三区四区五区中文| 国产精品一品二品| 欧美变态口味重另类| 亚洲午夜免费视频| 99久久99久久综合| 久久久久9999亚洲精品| 免费成人美女在线观看.| 欧美在线一二三四区| 亚洲欧洲av另类| 高清成人在线观看| 国产午夜亚洲精品不卡| 久久电影网站中文字幕| 制服视频三区第一页精品| 一区二区三区国产豹纹内裤在线| 国产91精品精华液一区二区三区| 日韩欧美一级在线播放| 日韩成人午夜精品| 在线不卡免费欧美| 午夜视黄欧洲亚洲| 欧美日韩一级二级三级| 亚洲综合在线电影| 欧洲另类一二三四区| 亚洲视频一二三| 91视频免费播放| 一区二区三区中文字幕精品精品 | 水蜜桃久久夜色精品一区的特点| 97精品久久久久中文字幕| 中文字幕在线一区二区三区| 成人美女视频在线观看18|