karthikmv
2 years ago
22 changed files with 4266 additions and 24 deletions
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 69 KiB |
File diff suppressed because it is too large
@ -0,0 +1,106 @@ |
|||
/* -----------------------------------------------------------------------------
|
|||
* align_sort.h |
|||
* |
|||
* iPDC - Phasor Data Concentrator |
|||
* |
|||
* Copyright (C) 2011-2012 Nitesh Pandit |
|||
* Copyright (C) 2011-2012 Kedar V. Khandeparkar |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, write to the Free Software |
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|||
* |
|||
* Authors: |
|||
* Nitesh Pandit <panditnitesh@gmail.com> |
|||
* Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com> |
|||
* |
|||
* ----------------------------------------------------------------------------- */ |
|||
|
|||
|
|||
#define MAXTSB 5 |
|||
#define OLDFRAMECOUNT 5 |
|||
|
|||
/* ---------------------------------------------------------------- */ |
|||
/* global variable */ |
|||
/* ---------------------------------------------------------------- */ |
|||
|
|||
int front = -1; |
|||
int rear=-1; |
|||
int Tsb_Count = 0; |
|||
|
|||
/* ---------------------------------------------------------------- */ |
|||
/* global Data Structure */ |
|||
/* ---------------------------------------------------------------- */ |
|||
|
|||
/* Data Structure for Time Stamp Buffer */ |
|||
struct TimeStampBuffer { |
|||
|
|||
char *soc; |
|||
char *fracsec; |
|||
int count; // Current index
|
|||
int num; // Total Number of PMUs
|
|||
int counter; // Timer that will be initially set to 0
|
|||
int ready_to_send; |
|||
struct pmupdc_id_list *idlist; |
|||
struct data_frame *first_data_frame; |
|||
|
|||
}TSB[MAXTSB]; |
|||
|
|||
struct pmupdc_id_list { |
|||
|
|||
char *idcode; |
|||
int num_pmu; |
|||
struct pmupdc_id_list *nextid; |
|||
}; |
|||
|
|||
// Kedar K on 8/6/2013
|
|||
struct oldDataFramesTimeStampList |
|||
{ |
|||
unsigned int soc; |
|||
unsigned int fracsec; |
|||
|
|||
}ODFT[OLDFRAMECOUNT]; |
|||
|
|||
int old_df_front = -1; |
|||
int old_df_rear = -1; |
|||
|
|||
/* ---------------------------------------------------------------- */ |
|||
/* Function prototypes */ |
|||
/* ---------------------------------------------------------------- */ |
|||
|
|||
void time_align(struct data_frame *df); |
|||
|
|||
void assign_df_to_TSB(struct data_frame *df,int index); |
|||
|
|||
void dispatch(int index); |
|||
|
|||
void clear_TSB(int index); |
|||
|
|||
int create_dataframe(int index); |
|||
|
|||
void checkForMissingFrames(ENTRY*); |
|||
|
|||
int create_cfgframe(); |
|||
|
|||
void sort_data_inside_TSB(int index); |
|||
|
|||
struct data_frame* generate_dummy_dataframe(unsigned char *); |
|||
|
|||
void adjustOldFrameCount(int index); |
|||
|
|||
void intermediate_dispatch(int xx); |
|||
|
|||
int matchDataFrameTimeToTSBTime(unsigned int df_soc,unsigned int df_fracsec); |
|||
|
|||
void attacheEachDataFrame(struct data_frame *temp_df,int z); |
|||
/**************************************** End of File *******************************************************/ |
@ -0,0 +1,724 @@ |
|||
/* -----------------------------------------------------------------------------
|
|||
* applications.c |
|||
* |
|||
* iPDC - Phasor Data Concentrator |
|||
* |
|||
* Copyright (C) 2011-2012 Nitesh Pandit |
|||
* Copyright (C) 2011-2012 Kedar V. Khandeparkar |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, write to the Free Software |
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|||
* |
|||
* Authors: |
|||
* Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com> |
|||
* |
|||
* ----------------------------------------------------------------------------- */ |
|||
|
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <stdlib.h> |
|||
#include <math.h> /* fabs */ |
|||
#include "parser.h" |
|||
#include "global.h" |
|||
#include "dallocate.h" |
|||
#include "applications.h" |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION averageFrequency(): */ |
|||
/* Computes average of frequency from all PMUs */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
float averageFrequency(struct data_frame *df) { |
|||
|
|||
//struct data_frame *df = TSB[index].first_data_frame;
|
|||
struct cfg_frame *temp_cfg = cfgfirst; |
|||
struct data_frame *temp_df; |
|||
float tempFreq = 0,avgFrequency; |
|||
int noOfPMU,i,j,count = 0; |
|||
|
|||
pthread_mutex_lock(&mutex_cfg); |
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
noOfPMU = to_intconvertor(temp_cfg->num_pmu); |
|||
count += noOfPMU; |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
for(i = 0;i<(count*10-100);i++) { |
|||
|
|||
temp_df = df; |
|||
temp_cfg = cfgfirst; |
|||
//printf("count = %d\n",count);
|
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
noOfPMU = to_intconvertor(temp_cfg->num_pmu); |
|||
|
|||
if(temp_df != NULL) { |
|||
|
|||
for(j = 0;j < noOfPMU; j++) { |
|||
|
|||
//printf("a\n");
|
|||
if(temp_cfg->pmu[j]->fmt->freq == '1') { |
|||
|
|||
tempFreq += decode_ieee_single(temp_df->dpmu[j]->freq); |
|||
|
|||
} else { |
|||
|
|||
tempFreq += to_intconvertor(temp_df->dpmu[j]->freq); |
|||
} |
|||
} |
|||
temp_df = temp_df->dnext; |
|||
} |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
} |
|||
pthread_mutex_unlock(&mutex_cfg); |
|||
|
|||
avgFrequency = tempFreq/count; |
|||
return avgFrequency; |
|||
} |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION frequencyInstability(): */ |
|||
/* Computes weighted average of frequency from some PMUs */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*int frequencyInstability(struct data_frame *df) {
|
|||
|
|||
//struct data_frame *df = TSB[index].first_data_frame;
|
|||
struct cfg_frame *temp_cfg = cfgfirst; |
|||
|
|||
float tempFreq = 0,tempFc=0,totalFreq =0,totalHi=0; |
|||
float timeDiff = 20*1e-3; |
|||
float deltaFreq = 0; |
|||
int noOfPMUs = 0,totalPMUs=0,j; |
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
totalPMUs += to_intconvertor(temp_cfg->num_pmu); |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
int generatorPMUs = (totalPMUs*ratio) + 2; // Considered 1/5*noofPMUs+2 frequencies
|
|||
int x = 0,*Hi; |
|||
Hi = randomGenerator(minHi,maxHi,generatorPMUs); |
|||
|
|||
temp_cfg = cfgfirst; |
|||
|
|||
while(temp_cfg != NULL) { |
|||
|
|||
noOfPMUs = to_intconvertor(temp_cfg->num_pmu); |
|||
|
|||
if(df != NULL) { |
|||
|
|||
for(j=0;j<noOfPMUs;j++) { |
|||
|
|||
if(temp_cfg->pmu[j]->fmt->freq == '1') { |
|||
|
|||
if(x == generatorPMUs) |
|||
break; |
|||
tempFreq = decode_ieee_single(df->dpmu[j]->freq); |
|||
totalFreq += Hi[x]*tempFreq; // Sum of Hi*fi (numerator)
|
|||
totalHi += Hi[x]; // Sum of Hi (denominator)
|
|||
x++; |
|||
} else { |
|||
|
|||
if(x == generatorPMUs) |
|||
break; |
|||
tempFreq = to_intconvertor(df->dpmu[j]->freq); |
|||
totalFreq += Hi[x]*tempFreq; // Sum of Hi*fi (numerator)
|
|||
totalHi += Hi[x]; // Sum of Hi (denominator)
|
|||
x++; |
|||
} |
|||
} |
|||
|
|||
df = df->dnext; |
|||
} |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
free(Hi); |
|||
|
|||
if(fc == 0) { |
|||
|
|||
fc = totalFreq/totalHi; |
|||
return 0; |
|||
|
|||
} else { |
|||
|
|||
tempFc = totalFreq/totalHi; |
|||
deltaFreq = fabs(fc-tempFc)/timeDiff; |
|||
/// Need to check deltaFreq < Threshold
|
|||
fc = tempFc; |
|||
if(deltaFreq>delFThreshold) |
|||
return 1; |
|||
else return 0; |
|||
} |
|||
} |
|||
*/ |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION angleInstability(): */ |
|||
/* Computes angular deviations from center of inertia */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*int angleInstability(struct data_frame *df) {
|
|||
|
|||
//struct data_frame *df = TSB[index].first_data_frame
|
|||
struct cfg_frame *temp_cfg = cfgfirst; |
|||
float totalPi,totalTheta,localAreaPi,*localAreaTheta; |
|||
int totalPMUs,noOfPMU,noOfAreas,noOfPMUsInOneArea,tempTotalPMUs,*localAreaPowerSchedule,*individualPowerSchedule; |
|||
|
|||
noOfPMUsInOneArea = 5; |
|||
totalPi= totalTheta =localAreaPi = 0; |
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
totalPMUs += to_intconvertor(temp_cfg->num_pmu); |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
tempTotalPMUs = totalPMUs; |
|||
float tt; |
|||
tt = (float)(totalPMUs*ratio)+2; // Number of areas eg 200*1/5+2 = 42
|
|||
noOfAreas = nearbyint(tt/noOfPMUsInOneArea); // 42/5 = 8.4
|
|||
int tt1 = (int)(noOfAreas); // 8
|
|||
int rem = nearbyint(tt%noOfPMUsInOneArea); |
|||
if(fabs(tt-tt1) >0) { //8.4 - 8 =0.4
|
|||
|
|||
noOfAreas++; // noOfAreas = 9
|
|||
} |
|||
|
|||
localAreaTheta = malloc((noOfAreas + 1)*sizeof(float)); |
|||
localAreaPowerSchedule = malloc((noOfAreas + 1)*sizeof(int)); |
|||
individualPowerSchedule = randomGenerator(minPi,maxPi,tt); |
|||
|
|||
temp_cfg = cfgfirst; |
|||
|
|||
float tempAreaAngle,tempAreaPower; |
|||
unsigned int phnmr,noOfPMUs,pType; |
|||
int x,y,z,i,j; // x to track no of areas and y to track no of generators in those areas z for individual generator schedule
|
|||
i = j = x = y = z = 0; |
|||
tempAreaPower = tempAreaAngle = 0; |
|||
unsigned char *d,*fp_left,*fp_right,*fx_left,*fx_right,*phasorType,polar; |
|||
|
|||
fp_left = malloc(5*sizeof(unsigned char)); |
|||
fp_right = malloc(5*sizeof(unsigned char)); |
|||
fx_left = malloc(3*sizeof(unsigned char)); |
|||
fx_right = malloc(3*sizeof(unsigned char)); |
|||
phasorType = malloc(1*sizeof(unsigned char)); |
|||
|
|||
while(temp_cfg != NULL) { // Main Loop starts
|
|||
|
|||
if(df != NULL) { |
|||
|
|||
noOfPMUs = to_intconvertor(temp_cfg->num_pmu); |
|||
|
|||
for(j = 0;j < noOfPMUs;j++) { |
|||
|
|||
phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); |
|||
|
|||
if(phnmr != 0) { |
|||
|
|||
if(temp_cfg->pmu[j]->fmt->phasor == 1) { // Floating
|
|||
|
|||
for(i = 0;i<phnmr;i++) { |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
|
|||
if((pType == 0)&&(i%3 ==0)) { // pTYpe = 0 indicates V and only phase I is chosen with the assumption that 3 phase data is sent
|
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
tempAreaAngle += (getVoltagePhasorAngle(1,fp_left,fp_right,d,polar,temp_cfg,i,j)) * individualPowerSchedule[z]; // 1 -> floating pt
|
|||
tempAreaPower += individualPowerSchedule[z]; |
|||
z++; |
|||
y++; |
|||
|
|||
if(y == rem && (x == noOfAreas - 1)) { |
|||
|
|||
localAreaTheta[x] = tempAreaAngle/tempAreaPower; |
|||
x++; |
|||
break; |
|||
|
|||
} else if(y == noOfPMUsInOneArea) { |
|||
|
|||
localAreaTheta[x] = tempAreaAngle/tempAreaPower; |
|||
y = 0; |
|||
x++; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} else { // fixed point
|
|||
|
|||
for(i = 0;i < phnmr; i++){ |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
|
|||
if((pType == 0)&&(i%3 ==0)) { |
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
tempAreaAngle += getVoltagePhasorAngle(0,fp_left,fp_right,d,polar,temp_cfg,i,j)* individualPowerSchedule[z]; // 0 -> fixed pt
|
|||
tempAreaPower += individualPowerSchedule[z]; |
|||
z++; |
|||
y++; |
|||
|
|||
if(y == rem && (x == noOfAreas - 1)) { |
|||
|
|||
localAreaTheta[x] = tempAreaAngle/tempAreaPower; |
|||
localAreaPowerSchedule[x] = tempAreaPower; |
|||
x++; |
|||
break; |
|||
|
|||
} else if(y == noOfPMUsInOneArea) { |
|||
|
|||
localAreaTheta[x] = tempAreaAngle/tempAreaPower; |
|||
localAreaPowerSchedule[x] = tempAreaPower; |
|||
y = 0; |
|||
x++; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
} // if df ends
|
|||
df = df->dnext; |
|||
} |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} // Main loop ends
|
|||
|
|||
float centerAngle,totalPower; |
|||
centerAngle = totalPower = 0; |
|||
|
|||
for (i = 0;i<noOfAreas;i++) { |
|||
|
|||
centerAngle += localAreaTheta[i]*localAreaPowerSchedule[i]; |
|||
totalPower += localAreaPowerSchedule[i]; |
|||
} |
|||
centerAngle = centerAngle/totalPower; |
|||
|
|||
char *violation = malloc(noOfAreas*sizeof(char)); |
|||
for (i = 0;i<noOfAreas;i++) |
|||
{ |
|||
if(fabs(centerAngle - localAreaTheta[i]) > angleThreshold) |
|||
violation[i] = '1'; |
|||
else |
|||
violation[i] = '0'; |
|||
} |
|||
|
|||
free(violation); |
|||
free(localAreaTheta); |
|||
free(localAreaPowerSchedule); |
|||
free(individualPowerSchedule); |
|||
free(fp_right); |
|||
free(fp_left); |
|||
free(fx_right); |
|||
free(fx_left); |
|||
} |
|||
*/ |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION voltagePhasorAggregation(): */ |
|||
/* Computes voltage phasor phasorAggregation */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*float voltagePhasorAggregation(struct data_frame *df) {
|
|||
|
|||
//struct data_frame *df = TSB[index].first_data_frame;
|
|||
struct cfg_frame *temp_cfg = cfgfirst; |
|||
|
|||
int i,j,noOfPMUs,totalPMUs; |
|||
totalPMUs = i = j = 0; |
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
totalPMUs += to_intconvertor(temp_cfg->num_pmu); |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
int generatorPMUs = (totalPMUs*ratio) + 4; |
|||
temp_cfg = cfgfirst; |
|||
|
|||
unsigned int phnmr; |
|||
char polar; |
|||
float avgVoltageMagnitude = 0; |
|||
unsigned char *d; |
|||
int x = 0; |
|||
|
|||
unsigned char *fp_left,*fp_right,*fx_left,*fx_right,*phasorType; |
|||
fp_left = malloc(5*sizeof(unsigned char)); |
|||
fp_right = malloc(5*sizeof(unsigned char)); |
|||
fx_left = malloc(3*sizeof(unsigned char)); |
|||
fx_right = malloc(3*sizeof(unsigned char)); |
|||
phasorType = malloc(1*sizeof(unsigned char)); |
|||
|
|||
int pType; |
|||
|
|||
while(temp_cfg != NULL){ // Main Loop starts
|
|||
|
|||
if(df != NULL) { |
|||
|
|||
noOfPMUs = to_intconvertor(temp_cfg->num_pmu); |
|||
|
|||
for(j=0;j<noOfPMUs;j++) { |
|||
phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); |
|||
if(phnmr != 0) { |
|||
if(temp_cfg->pmu[j]->fmt->phasor == 1) { // Floating
|
|||
|
|||
for(i = 0;i<phnmr;i++) { |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
if((pType == 0) && (i%3 == 0)) { |
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
avgVoltageMagnitude += getPhasorVolageMagnitude(1,fp_left,fp_right,d,polar,temp_cfg,i,j); // 1 -> floating pt
|
|||
} |
|||
|
|||
} |
|||
x++; |
|||
if(x == generatorPMUs) |
|||
break; |
|||
} else { // fixed point
|
|||
|
|||
for(i = 0;i < phnmr; i++){ |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
if((pType == 0) && (i%3 == 0)) { |
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
avgVoltageMagnitude += getPhasorVolageMagnitude(0,fp_left,fp_right,d,polar,temp_cfg,i,j); // 0 -> fixed pt
|
|||
} |
|||
} |
|||
x++; |
|||
if(x == generatorPMUs) |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
df = df->dnext; |
|||
} |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} // Main loop ends
|
|||
|
|||
free(fp_right); |
|||
free(fp_left); |
|||
free(fx_right); |
|||
free(fx_left); |
|||
|
|||
return avgVoltageMagnitude; |
|||
} |
|||
*/ |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION randomGenerator(): */ |
|||
/* num random numbers array generated between min to max */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
int * randomGenerator(int max,int min,int num) { |
|||
|
|||
int c =0,n,*coeff; |
|||
coeff = malloc((num+1)*sizeof(int)); |
|||
|
|||
while(1) { |
|||
|
|||
n = rand()%max + min; |
|||
|
|||
if(n>=min && n<= max) { |
|||
coeff[c] = n; |
|||
c++; |
|||
|
|||
if(c == num) |
|||
break; |
|||
} |
|||
} |
|||
return coeff; |
|||
} |
|||
|
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION getVoltagePhasorAngle(): */ |
|||
/* get the phase angle */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*float getVoltagePhasorAngle(int format,char left[],char right[],unsigned char *d,char polar,struct cfg_frame *temp_cfg,int i,int j) {
|
|||
|
|||
float fp_r,fp_i,fp_angle; |
|||
unsigned int f_r,f_i; |
|||
|
|||
|
|||
if(format == 1) { // format indicates fixed or floating point
|
|||
|
|||
memset(left,'\0',5); |
|||
memset(right,'\0',5); |
|||
//d = df->dpmu[j]->phasors[i];
|
|||
|
|||
copy_cbyc (left,d,4); |
|||
left[4] = '\0'; |
|||
d += 4; |
|||
|
|||
copy_cbyc(right,d,4); |
|||
right[4] = '\0'; |
|||
d += 4; |
|||
|
|||
fp_r = decode_ieee_single(left); |
|||
fp_i = decode_ieee_single(right); |
|||
|
|||
if(polar == '1') { // POLAR
|
|||
|
|||
fp_angle = fp_i; |
|||
} else { // rectangular
|
|||
|
|||
fp_angle = atan2f(fp_i, fp_r); |
|||
} |
|||
|
|||
} else { |
|||
|
|||
|
|||
memset(left,'\0',3); |
|||
memset(right,'\0',3); |
|||
|
|||
copy_cbyc (left,d,2); |
|||
left[2] = '\0'; |
|||
d += 2; |
|||
|
|||
copy_cbyc(right,d,2); |
|||
right[2] = '\0'; |
|||
d += 2; |
|||
|
|||
f_r = to_intconvertor(left); |
|||
f_i = to_intconvertor(right); |
|||
|
|||
if(polar == '1') { // POLAR
|
|||
|
|||
fp_angle = f_i*1e-4; // Angle is in 10^4 radians
|
|||
} else // RECTANGULAR
|
|||
{ |
|||
unsigned char *s = (unsigned char *)temp_cfg->pmu[j]->phunit[i]; |
|||
s++; |
|||
|
|||
unsigned char *buf = malloc(4*sizeof(unsigned char)); |
|||
copy_cbyc (buf,(unsigned char *)s,3); |
|||
buf[3] = '\0'; |
|||
unsigned long int l_phunit; |
|||
l_phunit = to_long_int_convertor1(buf); |
|||
l_phunit = l_phunit * 1e-5; |
|||
|
|||
fp_r = l_phunit *f_r; |
|||
fp_i = l_phunit *f_i; |
|||
|
|||
fp_angle = atan2f(fp_i, fp_r); |
|||
free(buf); |
|||
} |
|||
|
|||
} |
|||
return fp_angle; |
|||
} |
|||
*/ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION getPhasorVolageMagnitude(): */ |
|||
/* get the phasor volage magnitude */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*float getPhasorVolageMagnitude(int format,char left[],char right[],unsigned char *d,char polar,struct cfg_frame *temp_cfg,int i,int j) {
|
|||
|
|||
float fp_r,fp_i,fp_magnitude; |
|||
unsigned int f_r,f_i; |
|||
|
|||
if(format == 1) { // format indicates fixed or floating point
|
|||
|
|||
memset(left,'\0',5); |
|||
memset(right,'\0',5); |
|||
//d = df->dpmu[j]->phasors[i];
|
|||
|
|||
copy_cbyc (left,d,4); |
|||
left[4] = '\0'; |
|||
d += 4; |
|||
|
|||
copy_cbyc(right,d,4); |
|||
right[4] = '\0'; |
|||
d += 4; |
|||
|
|||
fp_r = decode_ieee_single(left); |
|||
fp_i = decode_ieee_single(right); |
|||
|
|||
if(polar == '1') { // POLAR
|
|||
|
|||
fp_magnitude = fp_r; |
|||
} else { // rectangular
|
|||
|
|||
fp_magnitude = sqrt(fp_i*fp_i + fp_r*fp_r); |
|||
} |
|||
|
|||
} else { |
|||
|
|||
|
|||
memset(left,'\0',3); |
|||
memset(right,'\0',3); |
|||
|
|||
copy_cbyc (left,d,2); |
|||
left[2] = '\0'; |
|||
d += 2; |
|||
|
|||
copy_cbyc(right,d,2); |
|||
right[2] = '\0'; |
|||
d += 2; |
|||
|
|||
f_r = to_intconvertor(left); |
|||
f_i = to_intconvertor(right); |
|||
|
|||
unsigned char *s = (unsigned char *)temp_cfg->pmu[j]->phunit[i]; |
|||
s++; |
|||
|
|||
unsigned char *buf = malloc(4*sizeof(unsigned char)); |
|||
copy_cbyc (buf,(unsigned char *)s,3); |
|||
buf[3] = '\0'; |
|||
unsigned long int l_phunit; |
|||
l_phunit = to_long_int_convertor1(buf); |
|||
l_phunit = l_phunit * 1e-5; |
|||
free(buf); |
|||
|
|||
if(polar == '1') { // POLAR
|
|||
|
|||
fp_magnitude = f_r*l_phunit; |
|||
|
|||
} else // RECTANGULAR
|
|||
{ |
|||
fp_r = l_phunit *f_r; |
|||
fp_i = l_phunit *f_i; |
|||
|
|||
fp_magnitude = sqrt(fp_i*fp_i + fp_r*fp_r); |
|||
} |
|||
} |
|||
return fp_magnitude; |
|||
} |
|||
*/ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
/* FUNCTION outOfStepDetection(): */ |
|||
/* angle deviations */ |
|||
/* ---------------------------------------------------------------------------- */ |
|||
|
|||
/*float outOfStepDetection(struct data_frame *df) {
|
|||
|
|||
//struct data_frame *df = TSB[index].first_data_frame;
|
|||
struct cfg_frame *temp_cfg = cfgfirst; |
|||
|
|||
int i,j,noOfPMUs,totalPMUs; |
|||
totalPMUs = i = j = 0; |
|||
|
|||
while(temp_cfg != NULL){ |
|||
|
|||
totalPMUs += to_intconvertor(temp_cfg->num_pmu); |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} |
|||
|
|||
int generatorPMUs = (totalPMUs*ratio); |
|||
if(generatorPMUs%2 == 1) |
|||
generatorPMUs +=1; |
|||
|
|||
temp_cfg = cfgfirst; |
|||
|
|||
if(OOSTD == '0') { |
|||
|
|||
delta = malloc((generatorPMUs+1)*sizeof(float)); |
|||
if(delta == NULL) |
|||
printf("no memory for delta\n"); |
|||
|
|||
slipFreuency = malloc((generatorPMUs+1)*sizeof(float)); |
|||
if(slipFreuency == NULL) |
|||
printf("no memory for slipFreuency\n"); |
|||
OOSTD = '1'; |
|||
} |
|||
|
|||
unsigned int phnmr; |
|||
char polar; |
|||
float phasorAngle = 0; |
|||
unsigned char *d; |
|||
int x = 0; |
|||
|
|||
unsigned char *fp_left,*fp_right,*fx_left,*fx_right,*phasorType; |
|||
fp_left = malloc(5*sizeof(unsigned char)); |
|||
fp_right = malloc(5*sizeof(unsigned char)); |
|||
fx_left = malloc(3*sizeof(unsigned char)); |
|||
fx_right = malloc(3*sizeof(unsigned char)); |
|||
phasorType = malloc(1*sizeof(unsigned char)); |
|||
|
|||
int pType; |
|||
|
|||
while(temp_cfg != NULL){ // Main Loop starts
|
|||
|
|||
if(df != NULL) { |
|||
|
|||
noOfPMUs = to_intconvertor(temp_cfg->num_pmu); |
|||
|
|||
for(j=0;j<noOfPMUs;j++) { |
|||
phnmr = to_intconvertor(temp_cfg->pmu[j]->phnmr); |
|||
if(phnmr != 0) { |
|||
if(temp_cfg->pmu[j]->fmt->phasor == 1) { // Floating
|
|||
|
|||
for(i = 0;i<phnmr;i++) { |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
if((pType == 0) && (i%3 == 0)) { |
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
phasorAngle = getVoltagePhasorAngle(1,fp_left,fp_right,d,polar,temp_cfg,i,j); // 1 -> floating pt
|
|||
} |
|||
|
|||
} |
|||
x++; |
|||
if(x == generatorPMUs) |
|||
break; |
|||
} else { // fixed point
|
|||
|
|||
for(i = 0;i < phnmr; i++){ |
|||
|
|||
copy_cbyc (phasorType,(unsigned char *)temp_cfg->pmu[j]->phunit[i],1); |
|||
pType = to_intconvertor1(phasorType); |
|||
if((pType == 0) && (i%3 == 0)) { |
|||
|
|||
d = df->dpmu[j]->phasors[i]; |
|||
polar = temp_cfg->pmu[j]->fmt->polar; |
|||
phasorAngle = getVoltagePhasorAngle(0,fp_left,fp_right,d,polar,temp_cfg,i,j); // 0 -> fixed pt
|
|||
} |
|||
} |
|||
x++; |
|||
if(x == generatorPMUs) |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
df = df->dnext; |
|||
} |
|||
temp_cfg = temp_cfg->cfgnext; |
|||
} // Main loop ends
|
|||
|
|||
free(fp_right); |
|||
free(fp_left); |
|||
free(fx_right); |
|||
free(fx_left); |
|||
|
|||
return 0; |
|||
}*/ |
@ -0,0 +1,47 @@ |
|||
/* -----------------------------------------------------------------------------
|
|||
* applications.h |
|||
* |
|||
* iPDC - Phasor Data Concentrator |
|||
* |
|||
* Copyright (C) 2011-2012 Nitesh Pandit |
|||
* Copyright (C) 2011-2012 Kedar V. Khandeparkar |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, write to the Free Software |
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|||
* |
|||
* Authors: |
|||
* Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com> |
|||
* |
|||
* ----------------------------------------------------------------------------- */ |
|||
|
|||
int minHi = 3,maxHi = 5; |
|||
int minPi = 100,maxPi = 500; |
|||
float fc = 0; |
|||
float delFThreshold = 0.3; |
|||
int angleThreshold = 20; |
|||
float ratio = 1/5; |
|||
float *delta,*slipFreuency; |
|||
char OOSTD = '0'; |
|||
//delta = 0;
|
|||
//slipFreuency = 0;
|
|||
|
|||
|
|||
float averageFrequency(struct data_frame *df); |
|||
int frequencyInstability(struct data_frame *df); |
|||
int angleInstability(struct data_frame *df); |
|||
float voltagePhasorAggregation(struct data_frame *df); |
|||
float outOfStepDetection(struct data_frame *df); |
|||
int * randomGenerator(int max,int min,int num); |
|||
float getVoltagePhasorAngle(int format,char left[],char right[],unsigned char *d,char polar,struct cfg_frame *temp_cfg,int i,int j); |
|||
float getPhasorVolageMagnitude(int format,char left[],char right[],unsigned char *d,char polar,struct cfg_frame *temp_cfg,int i,int j); |
@ -0,0 +1,769 @@ |
|||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|||
# examples/Makefile. Generated from Makefile.in by configure.
|
|||
|
|||
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
|
|||
|
|||
# This Makefile.in is free software; the Free Software Foundation
|
|||
# gives unlimited permission to copy and/or distribute it,
|
|||
# with or without modifications, as long as this notice is preserved.
|
|||
|
|||
# This program is distributed in the hope that it will be useful,
|
|||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|||
# PARTICULAR PURPOSE.
|
|||
|
|||
|
|||
|
|||
|
|||
am__is_gnu_make = { \
|
|||
if test -z '$(MAKELEVEL)'; then \
|
|||
false; \
|
|||
elif test -n '$(MAKE_HOST)'; then \
|
|||
true; \
|
|||
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
|||
true; \
|
|||
else \
|
|||
false; \
|
|||
fi; \
|
|||
} |
|||
am__make_running_with_option = \
|
|||
case $${target_option-} in \
|
|||
?) ;; \
|
|||
*) echo "am__make_running_with_option: internal error: invalid" \
|
|||
"target option '$${target_option-}' specified" >&2; \
|
|||
exit 1;; \
|
|||
esac; \
|
|||
has_opt=no; \
|
|||
sane_makeflags=$$MAKEFLAGS; \
|
|||
if $(am__is_gnu_make); then \
|
|||
sane_makeflags=$$MFLAGS; \
|
|||
else \
|
|||
case $$MAKEFLAGS in \
|
|||
*\\[\ \ ]*) \
|
|||
bs=\\; \
|
|||
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
|
|||
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
|
|||
esac; \
|
|||
fi; \
|
|||
skip_next=no; \
|
|||
strip_trailopt () \
|
|||
{ \
|
|||
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
|
|||
}; \
|
|||
for flg in $$sane_makeflags; do \
|
|||
test $$skip_next = yes && { skip_next=no; continue; }; \
|
|||
case $$flg in \
|
|||
*=*|--*) continue;; \
|
|||
-*I) strip_trailopt 'I'; skip_next=yes;; \
|
|||
-*I?*) strip_trailopt 'I';; \
|
|||
-*O) strip_trailopt 'O'; skip_next=yes;; \
|
|||
-*O?*) strip_trailopt 'O';; \
|
|||
-*l) strip_trailopt 'l'; skip_next=yes;; \
|
|||
-*l?*) strip_trailopt 'l';; \
|
|||
-[dEDm]) skip_next=yes;; \
|
|||
-[JT]) skip_next=yes;; \
|
|||
esac; \
|
|||
case $$flg in \
|
|||
*$$target_option*) has_opt=yes; break;; \
|
|||
esac; \
|
|||
done; \
|
|||
test $$has_opt = yes |
|||
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) |
|||
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) |
|||
pkgdatadir = $(datadir)/osm-gps-map |
|||
pkgincludedir = $(includedir)/osm-gps-map |
|||
pkglibdir = $(libdir)/osm-gps-map |
|||
pkglibexecdir = $(libexecdir)/osm-gps-map |
|||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd |
|||
install_sh_DATA = $(install_sh) -c -m 644 |
|||
install_sh_PROGRAM = $(install_sh) -c |
|||
install_sh_SCRIPT = $(install_sh) -c |
|||
INSTALL_HEADER = $(INSTALL_DATA) |
|||
transform = $(program_transform_name) |
|||
NORMAL_INSTALL = : |
|||
PRE_INSTALL = : |
|||
POST_INSTALL = : |
|||
NORMAL_UNINSTALL = : |
|||
PRE_UNINSTALL = : |
|||
POST_UNINSTALL = : |
|||
build_triplet = x86_64-pc-linux-gnu |
|||
host_triplet = x86_64-pc-linux-gnu |
|||
noinst_PROGRAMS = mapviewer$(EXEEXT) polygon$(EXEEXT) \
|
|||
editable_track$(EXEEXT) |
|||
subdir = examples |
|||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
|||
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_is_release.m4 \
|
|||
$(top_srcdir)/m4/ax_require_defined.m4 \
|
|||
$(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/introspection.m4 \
|
|||
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
|
|||
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
|
|||
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
|
|||
$(top_srcdir)/configure.ac |
|||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|||
$(ACLOCAL_M4) |
|||
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) |
|||
mkinstalldirs = $(install_sh) -d |
|||
CONFIG_HEADER = $(top_builddir)/config.h |
|||
CONFIG_CLEAN_FILES = |
|||
CONFIG_CLEAN_VPATH_FILES = |
|||
PROGRAMS = $(noinst_PROGRAMS) |
|||
am_editable_track_OBJECTS = editable_track-editable_track.$(OBJEXT) |
|||
editable_track_OBJECTS = $(am_editable_track_OBJECTS) |
|||
am__DEPENDENCIES_1 = |
|||
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
|||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) |
|||
editable_track_DEPENDENCIES = $(am__DEPENDENCIES_2) \
|
|||
$(am__DEPENDENCIES_1) $(top_builddir)/src/libosmgpsmap-1.0.la |
|||
AM_V_lt = $(am__v_lt_$(V)) |
|||
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_lt_0 = --silent |
|||
am__v_lt_1 = |
|||
editable_track_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
|
|||
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
|
|||
$(editable_track_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
|
|||
$@ |
|||
am_mapviewer_OBJECTS = mapviewer-mapviewer.$(OBJEXT) |
|||
mapviewer_OBJECTS = $(am_mapviewer_OBJECTS) |
|||
mapviewer_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
|
|||
$(top_builddir)/src/libosmgpsmap-1.0.la |
|||
mapviewer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
|||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mapviewer_CFLAGS) \
|
|||
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ |
|||
am_polygon_OBJECTS = polygon-polygon.$(OBJEXT) |
|||
polygon_OBJECTS = $(am_polygon_OBJECTS) |
|||
polygon_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
|
|||
$(top_builddir)/src/libosmgpsmap-1.0.la |
|||
polygon_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
|||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(polygon_CFLAGS) \
|
|||
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ |
|||
AM_V_P = $(am__v_P_$(V)) |
|||
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_P_0 = false |
|||
am__v_P_1 = : |
|||
AM_V_GEN = $(am__v_GEN_$(V)) |
|||
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_GEN_0 = @echo " GEN " $@; |
|||
am__v_GEN_1 = |
|||
AM_V_at = $(am__v_at_$(V)) |
|||
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_at_0 = @ |
|||
am__v_at_1 = |
|||
DEFAULT_INCLUDES = -I. -I$(top_builddir) |
|||
depcomp = $(SHELL) $(top_srcdir)/depcomp |
|||
am__maybe_remake_depfiles = depfiles |
|||
am__depfiles_remade = ./$(DEPDIR)/editable_track-editable_track.Po \
|
|||
./$(DEPDIR)/mapviewer-mapviewer.Po \
|
|||
./$(DEPDIR)/polygon-polygon.Po |
|||
am__mv = mv -f |
|||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
|||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
|||
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
|||
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
|
|||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
|||
$(AM_CFLAGS) $(CFLAGS) |
|||
AM_V_CC = $(am__v_CC_$(V)) |
|||
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_CC_0 = @echo " CC " $@; |
|||
am__v_CC_1 = |
|||
CCLD = $(CC) |
|||
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
|||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
|||
$(AM_LDFLAGS) $(LDFLAGS) -o $@ |
|||
AM_V_CCLD = $(am__v_CCLD_$(V)) |
|||
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) |
|||
am__v_CCLD_0 = @echo " CCLD " $@; |
|||
am__v_CCLD_1 = |
|||
SOURCES = $(editable_track_SOURCES) $(mapviewer_SOURCES) \
|
|||
$(polygon_SOURCES) |
|||
DIST_SOURCES = $(editable_track_SOURCES) $(mapviewer_SOURCES) \
|
|||
$(polygon_SOURCES) |
|||
am__can_run_installinfo = \
|
|||
case $$AM_UPDATE_INFO_DIR in \
|
|||
n|no|NO) false;; \
|
|||
*) (install-info --version) >/dev/null 2>&1;; \
|
|||
esac |
|||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) |
|||
# Read a list of newline-separated strings from the standard input,
|
|||
# and print each of them once, without duplicates. Input order is
|
|||
# *not* preserved.
|
|||
am__uniquify_input = $(AWK) '\
|
|||
BEGIN { nonempty = 0; } \
|
|||
{ items[$$0] = 1; nonempty = 1; } \
|
|||
END { if (nonempty) { for (i in items) print i; }; } \
|
|||
' |
|||
# Make sure the list of sources is unique. This is necessary because,
|
|||
# e.g., the same source file might be shared among _SOURCES variables
|
|||
# for different programs/libraries.
|
|||
am__define_uniq_tagged_files = \
|
|||
list='$(am__tagged_files)'; \
|
|||
unique=`for i in $$list; do \
|
|||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
|||
done | $(am__uniquify_input)` |
|||
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README |
|||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) |
|||
ACLOCAL = ${SHELL} '/home/chasingcar/dev/osm-gps-map/missing' aclocal-1.16 |
|||
AMTAR = $${TAR-tar} |
|||
AM_DEFAULT_VERBOSITY = 0 |
|||
AR = ar |
|||
AS = as |
|||
AUTOCONF = ${SHELL} '/home/chasingcar/dev/osm-gps-map/missing' autoconf |
|||
AUTOHEADER = ${SHELL} '/home/chasingcar/dev/osm-gps-map/missing' autoheader |
|||
AUTOMAKE = ${SHELL} '/home/chasingcar/dev/osm-gps-map/missing' automake-1.16 |
|||
AWK = mawk |
|||
CAIRO_CFLAGS = -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 |
|||
CAIRO_LIBS = -lcairo |
|||
CC = gcc |
|||
CCDEPMODE = depmode=gcc3 |
|||
CFLAGS = -g -O2 |
|||
CPPFLAGS = |
|||
CSCOPE = cscope |
|||
CTAGS = ctags |
|||
CYGPATH_W = echo |
|||
DEFS = -DHAVE_CONFIG_H |
|||
DEPDIR = .deps |
|||
DLLTOOL = dlltool |
|||
DSYMUTIL = |
|||
DUMPBIN = |
|||
ECHO_C = |
|||
ECHO_N = -n |
|||
ECHO_T = |
|||
EGREP = /usr/bin/grep -E |
|||
ETAGS = etags |
|||
EXEEXT = |
|||
FGREP = /usr/bin/grep -F |
|||
GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
GLIB_LIBS = -lglib-2.0 |
|||
GREP = /usr/bin/grep |
|||
GTHREAD_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
GTHREAD_LIBS = -lgthread-2.0 -pthread -lglib-2.0 |
|||
GTKDOC_CHECK = gtkdoc-check.test |
|||
GTKDOC_CHECK_PATH = /usr/bin/gtkdoc-check |
|||
GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 |
|||
GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf |
|||
GTKDOC_REBASE = /usr/bin/gtkdoc-rebase |
|||
GTK_CFLAGS = -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/x86_64-linux-gnu -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
GTK_LIBS = -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 |
|||
HTML_DIR = ${datadir}/gtk-doc/html |
|||
INSTALL = /usr/bin/install -c |
|||
INSTALL_DATA = ${INSTALL} -m 644 |
|||
INSTALL_PROGRAM = ${INSTALL} |
|||
INSTALL_SCRIPT = ${INSTALL} |
|||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s |
|||
INTROSPECTION_CFLAGS = -I/usr/include/gobject-introspection-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler |
|||
INTROSPECTION_GENERATE = /usr/bin/g-ir-generate |
|||
INTROSPECTION_GIRDIR = /usr/local/share/gir-1.0 |
|||
INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 |
|||
INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection |
|||
INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner |
|||
INTROSPECTION_TYPELIBDIR = /usr/local/lib/girepository-1.0 |
|||
LD = /usr/bin/ld -m elf_x86_64 |
|||
LDFLAGS = |
|||
LIBOBJS = |
|||
LIBS = |
|||
LIBTOOL = $(SHELL) $(top_builddir)/libtool |
|||
LIPO = |
|||
LN_S = ln -s |
|||
LTLIBOBJS = |
|||
LT_SYS_LIBRARY_PATH = |
|||
LT_VERSION_INFO = 2:1:1 |
|||
MAKEINFO = ${SHELL} '/home/chasingcar/dev/osm-gps-map/missing' makeinfo |
|||
MANIFEST_TOOL = : |
|||
MKDIR_P = /usr/bin/mkdir -p |
|||
NM = /usr/bin/nm -B |
|||
NMEDIT = |
|||
OBJDUMP = objdump |
|||
OBJEXT = o |
|||
OTOOL = |
|||
OTOOL64 = |
|||
PACKAGE = osm-gps-map |
|||
PACKAGE_BUGREPORT = http://github.com/nzjrs/osm-gps-map/issues |
|||
PACKAGE_NAME = osm-gps-map |
|||
PACKAGE_STRING = osm-gps-map 1.2.1 |
|||
PACKAGE_TARNAME = osm-gps-map |
|||
PACKAGE_URL = |
|||
PACKAGE_VERSION = 1.2.1 |
|||
PATH_SEPARATOR = : |
|||
PKG_CONFIG = /usr/bin/pkg-config |
|||
PKG_CONFIG_LIBDIR = |
|||
PKG_CONFIG_PATH = |
|||
RANLIB = ranlib |
|||
SED = /usr/bin/sed |
|||
SET_MAKE = |
|||
SHELL = /bin/bash |
|||
SOUP24_CFLAGS = -pthread -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
|||
SOUP24_LIBS = -lsoup-2.4 -Wl,--export-dynamic -lgmodule-2.0 -pthread -lgio-2.0 -lgobject-2.0 -lglib-2.0 |
|||
STRIP = strip |
|||
VERSION = 1.2.1 |
|||
_GI_EXP_DATADIR = /usr/local/share |
|||
_GI_EXP_LIBDIR = /usr/local/lib |
|||
abs_builddir = /home/chasingcar/dev/osm-gps-map/examples |
|||
abs_srcdir = /home/chasingcar/dev/osm-gps-map/examples |
|||
abs_top_builddir = /home/chasingcar/dev/osm-gps-map |
|||
abs_top_srcdir = /home/chasingcar/dev/osm-gps-map |
|||
ac_ct_AR = ar |
|||
ac_ct_CC = gcc |
|||
ac_ct_DUMPBIN = |
|||
am__include = include |
|||
am__leading_dot = . |
|||
am__quote = |
|||
am__tar = $${TAR-tar} chof - "$$tardir" |
|||
am__untar = $${TAR-tar} xf - |
|||
bindir = ${exec_prefix}/bin |
|||
build = x86_64-pc-linux-gnu |
|||
build_alias = |
|||
build_cpu = x86_64 |
|||
build_os = linux-gnu |
|||
build_vendor = pc |
|||
builddir = . |
|||
datadir = ${datarootdir} |
|||
datarootdir = ${prefix}/share |
|||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} |
|||
dvidir = ${docdir} |
|||
exec_prefix = ${prefix} |
|||
host = x86_64-pc-linux-gnu |
|||
host_alias = |
|||
host_cpu = x86_64 |
|||
host_os = linux-gnu |
|||
host_vendor = pc |
|||
htmldir = ${docdir} |
|||
includedir = ${prefix}/include |
|||
infodir = ${datarootdir}/info |
|||
install_sh = ${SHELL} /home/chasingcar/dev/osm-gps-map/install-sh |
|||
libdir = ${exec_prefix}/lib |
|||
libexecdir = ${exec_prefix}/libexec |
|||
localedir = ${datarootdir}/locale |
|||
localstatedir = ${prefix}/var |
|||
mandir = ${datarootdir}/man |
|||
mkdir_p = $(MKDIR_P) |
|||
oldincludedir = /usr/include |
|||
pdfdir = ${docdir} |
|||
prefix = /usr/local |
|||
program_transform_name = s,x,x, |
|||
psdir = ${docdir} |
|||
runstatedir = ${localstatedir}/run |
|||
sbindir = ${exec_prefix}/sbin |
|||
sharedstatedir = ${prefix}/com |
|||
srcdir = . |
|||
sysconfdir = ${prefix}/etc |
|||
target_alias = |
|||
top_build_prefix = ../ |
|||
top_builddir = .. |
|||
top_srcdir = .. |
|||
OSMGPSMAP_CFLAGS = \
|
|||
$(GLIB_CFLAGS) \
|
|||
$(GTK_CFLAGS) \
|
|||
$(CAIRO_CFLAGS) \
|
|||
$(SOUP24_CFLAGS) |
|||
|
|||
OSMGPSMAP_LIBS = \
|
|||
$(GLIB_LIBS) \
|
|||
$(GTK_LIBS) \
|
|||
$(CAIRO_LIBS) \
|
|||
$(SOUP24_LIBS) |
|||
|
|||
mapviewer_SOURCES = \
|
|||
mapviewer.c |
|||
|
|||
mapviewer_CFLAGS = \
|
|||
-I$(top_srcdir)/src \
|
|||
$(WARN_CFLAGS) \
|
|||
$(DISABLE_DEPRECATED) \
|
|||
$(OSMGPSMAP_CFLAGS) \
|
|||
$(GTHREAD_CFLAGS) |
|||
|
|||
mapviewer_LDADD = \
|
|||
$(OSMGPSMAP_LIBS) \
|
|||
$(GTHREAD_LIBS) \
|
|||
$(top_builddir)/src/libosmgpsmap-1.0.la |
|||
|
|||
polygon_SOURCES = \
|
|||
polygon.c |
|||
|
|||
polygon_CFLAGS = \
|
|||
-I$(top_srcdir)/src \
|
|||
$(WARN_CFLAGS) \
|
|||
$(DISABLE_DEPRECATED) \
|
|||
$(OSMGPSMAP_CFLAGS) \
|
|||
$(GTHREAD_CFLAGS) |
|||
|
|||
polygon_LDADD = \
|
|||
$(OSMGPSMAP_LIBS) \
|
|||
$(GTHREAD_LIBS) \
|
|||
$(top_builddir)/src/libosmgpsmap-1.0.la |
|||
|
|||
editable_track_SOURCES = \
|
|||
editable_track.c |
|||
|
|||
editable_track_CFLAGS = \
|
|||
-I$(top_srcdir)/src \
|
|||
$(WARN_CFLAGS) \
|
|||
$(DISABLE_DEPRECATED) \
|
|||
$(OSMGPSMAP_CFLAGS) \
|
|||
$(GTHREAD_CFLAGS) |
|||
|
|||
editable_track_LDADD = \
|
|||
$(OSMGPSMAP_LIBS) \
|
|||
$(GTHREAD_LIBS) \
|
|||
$(top_builddir)/src/libosmgpsmap-1.0.la |
|||
|
|||
EXTRA_DIST = poi.png mapviewer.ui mapviewer.js README |
|||
all: all-am |
|||
|
|||
.SUFFIXES: |
|||
.SUFFIXES: .c .lo .o .obj |
|||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) |
|||
@for dep in $?; do \
|
|||
case '$(am__configure_deps)' in \
|
|||
*$$dep*) \
|
|||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
|||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
|||
exit 1;; \
|
|||
esac; \
|
|||
done; \
|
|||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
|
|||
$(am__cd) $(top_srcdir) && \
|
|||
$(AUTOMAKE) --foreign examples/Makefile |
|||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status |
|||
@case '$?' in \
|
|||
*config.status*) \
|
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
|||
*) \
|
|||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
|
|||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
|||
esac; |
|||
|
|||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
|
|||
$(top_srcdir)/configure: $(am__configure_deps) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
$(ACLOCAL_M4): $(am__aclocal_m4_deps) |
|||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh |
|||
$(am__aclocal_m4_deps): |
|||
|
|||
clean-noinstPROGRAMS: |
|||
@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
|
|||
echo " rm -f" $$list; \
|
|||
rm -f $$list || exit $$?; \
|
|||
test -n "$(EXEEXT)" || exit 0; \
|
|||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
|||
echo " rm -f" $$list; \
|
|||
rm -f $$list |
|||
|
|||
editable_track$(EXEEXT): $(editable_track_OBJECTS) $(editable_track_DEPENDENCIES) $(EXTRA_editable_track_DEPENDENCIES) |
|||
@rm -f editable_track$(EXEEXT) |
|||
$(AM_V_CCLD)$(editable_track_LINK) $(editable_track_OBJECTS) $(editable_track_LDADD) $(LIBS) |
|||
|
|||
mapviewer$(EXEEXT): $(mapviewer_OBJECTS) $(mapviewer_DEPENDENCIES) $(EXTRA_mapviewer_DEPENDENCIES) |
|||
@rm -f mapviewer$(EXEEXT) |
|||
$(AM_V_CCLD)$(mapviewer_LINK) $(mapviewer_OBJECTS) $(mapviewer_LDADD) $(LIBS) |
|||
|
|||
polygon$(EXEEXT): $(polygon_OBJECTS) $(polygon_DEPENDENCIES) $(EXTRA_polygon_DEPENDENCIES) |
|||
@rm -f polygon$(EXEEXT) |
|||
$(AM_V_CCLD)$(polygon_LINK) $(polygon_OBJECTS) $(polygon_LDADD) $(LIBS) |
|||
|
|||
mostlyclean-compile: |
|||
-rm -f *.$(OBJEXT) |
|||
|
|||
distclean-compile: |
|||
-rm -f *.tab.c |
|||
|
|||
include ./$(DEPDIR)/editable_track-editable_track.Po # am--include-marker
|
|||
include ./$(DEPDIR)/mapviewer-mapviewer.Po # am--include-marker
|
|||
include ./$(DEPDIR)/polygon-polygon.Po # am--include-marker
|
|||
|
|||
$(am__depfiles_remade): |
|||
@$(MKDIR_P) $(@D) |
|||
@echo '# dummy' >$@-t && $(am__mv) $@-t $@ |
|||
|
|||
am--depfiles: $(am__depfiles_remade) |
|||
|
|||
.c.o: |
|||
$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
|||
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
|||
$(am__mv) $$depbase.Tpo $$depbase.Po |
|||
# $(AM_V_CC)source='$<' object='$@' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
|
|||
|
|||
.c.obj: |
|||
$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
|||
$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
|||
$(am__mv) $$depbase.Tpo $$depbase.Po |
|||
# $(AM_V_CC)source='$<' object='$@' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
|||
|
|||
.c.lo: |
|||
$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
|||
$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
|||
$(am__mv) $$depbase.Tpo $$depbase.Plo |
|||
# $(AM_V_CC)source='$<' object='$@' libtool=yes \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
|
|||
|
|||
editable_track-editable_track.o: editable_track.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(editable_track_CFLAGS) $(CFLAGS) -MT editable_track-editable_track.o -MD -MP -MF $(DEPDIR)/editable_track-editable_track.Tpo -c -o editable_track-editable_track.o `test -f 'editable_track.c' || echo '$(srcdir)/'`editable_track.c |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/editable_track-editable_track.Tpo $(DEPDIR)/editable_track-editable_track.Po |
|||
# $(AM_V_CC)source='editable_track.c' object='editable_track-editable_track.o' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(editable_track_CFLAGS) $(CFLAGS) -c -o editable_track-editable_track.o `test -f 'editable_track.c' || echo '$(srcdir)/'`editable_track.c
|
|||
|
|||
editable_track-editable_track.obj: editable_track.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(editable_track_CFLAGS) $(CFLAGS) -MT editable_track-editable_track.obj -MD -MP -MF $(DEPDIR)/editable_track-editable_track.Tpo -c -o editable_track-editable_track.obj `if test -f 'editable_track.c'; then $(CYGPATH_W) 'editable_track.c'; else $(CYGPATH_W) '$(srcdir)/editable_track.c'; fi` |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/editable_track-editable_track.Tpo $(DEPDIR)/editable_track-editable_track.Po |
|||
# $(AM_V_CC)source='editable_track.c' object='editable_track-editable_track.obj' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(editable_track_CFLAGS) $(CFLAGS) -c -o editable_track-editable_track.obj `if test -f 'editable_track.c'; then $(CYGPATH_W) 'editable_track.c'; else $(CYGPATH_W) '$(srcdir)/editable_track.c'; fi`
|
|||
|
|||
mapviewer-mapviewer.o: mapviewer.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mapviewer_CFLAGS) $(CFLAGS) -MT mapviewer-mapviewer.o -MD -MP -MF $(DEPDIR)/mapviewer-mapviewer.Tpo -c -o mapviewer-mapviewer.o `test -f 'mapviewer.c' || echo '$(srcdir)/'`mapviewer.c |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/mapviewer-mapviewer.Tpo $(DEPDIR)/mapviewer-mapviewer.Po |
|||
# $(AM_V_CC)source='mapviewer.c' object='mapviewer-mapviewer.o' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mapviewer_CFLAGS) $(CFLAGS) -c -o mapviewer-mapviewer.o `test -f 'mapviewer.c' || echo '$(srcdir)/'`mapviewer.c
|
|||
|
|||
mapviewer-mapviewer.obj: mapviewer.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mapviewer_CFLAGS) $(CFLAGS) -MT mapviewer-mapviewer.obj -MD -MP -MF $(DEPDIR)/mapviewer-mapviewer.Tpo -c -o mapviewer-mapviewer.obj `if test -f 'mapviewer.c'; then $(CYGPATH_W) 'mapviewer.c'; else $(CYGPATH_W) '$(srcdir)/mapviewer.c'; fi` |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/mapviewer-mapviewer.Tpo $(DEPDIR)/mapviewer-mapviewer.Po |
|||
# $(AM_V_CC)source='mapviewer.c' object='mapviewer-mapviewer.obj' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mapviewer_CFLAGS) $(CFLAGS) -c -o mapviewer-mapviewer.obj `if test -f 'mapviewer.c'; then $(CYGPATH_W) 'mapviewer.c'; else $(CYGPATH_W) '$(srcdir)/mapviewer.c'; fi`
|
|||
|
|||
polygon-polygon.o: polygon.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polygon_CFLAGS) $(CFLAGS) -MT polygon-polygon.o -MD -MP -MF $(DEPDIR)/polygon-polygon.Tpo -c -o polygon-polygon.o `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/polygon-polygon.Tpo $(DEPDIR)/polygon-polygon.Po |
|||
# $(AM_V_CC)source='polygon.c' object='polygon-polygon.o' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polygon_CFLAGS) $(CFLAGS) -c -o polygon-polygon.o `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c
|
|||
|
|||
polygon-polygon.obj: polygon.c |
|||
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polygon_CFLAGS) $(CFLAGS) -MT polygon-polygon.obj -MD -MP -MF $(DEPDIR)/polygon-polygon.Tpo -c -o polygon-polygon.obj `if test -f 'polygon.c'; then $(CYGPATH_W) 'polygon.c'; else $(CYGPATH_W) '$(srcdir)/polygon.c'; fi` |
|||
$(AM_V_at)$(am__mv) $(DEPDIR)/polygon-polygon.Tpo $(DEPDIR)/polygon-polygon.Po |
|||
# $(AM_V_CC)source='polygon.c' object='polygon-polygon.obj' libtool=no \
|
|||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
|||
# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(polygon_CFLAGS) $(CFLAGS) -c -o polygon-polygon.obj `if test -f 'polygon.c'; then $(CYGPATH_W) 'polygon.c'; else $(CYGPATH_W) '$(srcdir)/polygon.c'; fi`
|
|||
|
|||
mostlyclean-libtool: |
|||
-rm -f *.lo |
|||
|
|||
clean-libtool: |
|||
-rm -rf .libs _libs |
|||
|
|||
ID: $(am__tagged_files) |
|||
$(am__define_uniq_tagged_files); mkid -fID $$unique |
|||
tags: tags-am |
|||
TAGS: tags |
|||
|
|||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) |
|||
set x; \
|
|||
here=`pwd`; \
|
|||
$(am__define_uniq_tagged_files); \
|
|||
shift; \
|
|||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
|||
test -n "$$unique" || unique=$$empty_fix; \
|
|||
if test $$# -gt 0; then \ |
|||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|||
"$$@" $$unique; \
|
|||
else \
|
|||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
|||
$$unique; \
|
|||
fi; \
|
|||
fi |
|||
ctags: ctags-am |
|||
|
|||
CTAGS: ctags |
|||
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) |
|||
$(am__define_uniq_tagged_files); \
|
|||
test -z "$(CTAGS_ARGS)$$unique" \
|
|||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
|||
$$unique |
|||
|
|||
GTAGS: |
|||
here=`$(am__cd) $(top_builddir) && pwd` \
|
|||
&& $(am__cd) $(top_srcdir) \
|
|||
&& gtags -i $(GTAGS_ARGS) "$$here" |
|||
cscopelist: cscopelist-am |
|||
|
|||
cscopelist-am: $(am__tagged_files) |
|||
list='$(am__tagged_files)'; \
|
|||
case "$(srcdir)" in \
|
|||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
|||
*) sdir=$(subdir)/$(srcdir) ;; \
|
|||
esac; \
|
|||
for i in $$list; do \
|
|||
if test -f "$$i"; then \
|
|||
echo "$(subdir)/$$i"; \
|
|||
else \
|
|||
echo "$$sdir/$$i"; \
|
|||
fi; \
|
|||
done >> $(top_builddir)/cscope.files |
|||
|
|||
distclean-tags: |
|||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags |
|||
distdir: $(BUILT_SOURCES) |
|||
$(MAKE) $(AM_MAKEFLAGS) distdir-am |
|||
|
|||
distdir-am: $(DISTFILES) |
|||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
|||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
|||
list='$(DISTFILES)'; \
|
|||
dist_files=`for file in $$list; do echo $$file; done | \
|
|||
sed -e "s|^$$srcdirstrip/||;t" \
|
|||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
|||
case $$dist_files in \
|
|||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
|||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
|||
sort -u` ;; \
|
|||
esac; \
|
|||
for file in $$dist_files; do \
|
|||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
|||
if test -d $$d/$$file; then \
|
|||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
|||
if test -d "$(distdir)/$$file"; then \
|
|||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
|||
fi; \
|
|||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
|||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
|||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
|||
fi; \
|
|||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
|||
else \
|
|||
test -f "$(distdir)/$$file" \
|
|||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
|||
|| exit 1; \
|
|||
fi; \
|
|||
done |
|||
check-am: all-am |
|||
check: check-am |
|||
all-am: Makefile $(PROGRAMS) |
|||
installdirs: |
|||
install: install-am |
|||
install-exec: install-exec-am |
|||
install-data: install-data-am |
|||
uninstall: uninstall-am |
|||
|
|||
install-am: all-am |
|||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am |
|||
|
|||
installcheck: installcheck-am |
|||
install-strip: |
|||
if test -z '$(STRIP)'; then \
|
|||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|||
install; \
|
|||
else \
|
|||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
|||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
|||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
|||
fi |
|||
mostlyclean-generic: |
|||
|
|||
clean-generic: |
|||
|
|||
distclean-generic: |
|||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) |
|||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) |
|||
|
|||
maintainer-clean-generic: |
|||
@echo "This command is intended for maintainers to use" |
|||
@echo "it deletes files that may require special tools to rebuild." |
|||
clean: clean-am |
|||
|
|||
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ |
|||
mostlyclean-am |
|||
|
|||
distclean: distclean-am |
|||
-rm -f ./$(DEPDIR)/editable_track-editable_track.Po |
|||
-rm -f ./$(DEPDIR)/mapviewer-mapviewer.Po |
|||
-rm -f ./$(DEPDIR)/polygon-polygon.Po |
|||
-rm -f Makefile |
|||
distclean-am: clean-am distclean-compile distclean-generic \ |
|||
distclean-tags |
|||
|
|||
dvi: dvi-am |
|||
|
|||
dvi-am: |
|||
|
|||
html: html-am |
|||
|
|||
html-am: |
|||
|
|||
info: info-am |
|||
|
|||
info-am: |
|||
|
|||
install-data-am: |
|||
|
|||
install-dvi: install-dvi-am |
|||
|
|||
install-dvi-am: |
|||
|
|||
install-exec-am: |
|||
|
|||
install-html: install-html-am |
|||
|
|||
install-html-am: |
|||
|
|||
install-info: install-info-am |
|||
|
|||
install-info-am: |
|||
|
|||
install-man: |
|||
|
|||
install-pdf: install-pdf-am |
|||
|
|||
install-pdf-am: |
|||
|
|||
install-ps: install-ps-am |
|||
|
|||
install-ps-am: |
|||
|
|||
installcheck-am: |
|||
|
|||
maintainer-clean: maintainer-clean-am |
|||
-rm -f ./$(DEPDIR)/editable_track-editable_track.Po |
|||
-rm -f ./$(DEPDIR)/mapviewer-mapviewer.Po |
|||
-rm -f ./$(DEPDIR)/polygon-polygon.Po |
|||
-rm -f Makefile |
|||
maintainer-clean-am: distclean-am maintainer-clean-generic |
|||
|
|||
mostlyclean: mostlyclean-am |
|||
|
|||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \ |
|||
mostlyclean-libtool |
|||
|
|||
pdf: pdf-am |
|||
|
|||
pdf-am: |
|||
|
|||
ps: ps-am |
|||
|
|||
ps-am: |
|||
|
|||
uninstall-am: |
|||
|
|||
.MAKE: install-am install-strip |
|||
|
|||
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ |
|||
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
|
|||
ctags ctags-am distclean distclean-compile distclean-generic \
|
|||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
|||
html-am info info-am install install-am install-data \
|
|||
install-data-am install-dvi install-dvi-am install-exec \
|
|||
install-exec-am install-html install-html-am install-info \
|
|||
install-info-am install-man install-pdf install-pdf-am \
|
|||
install-ps install-ps-am install-strip installcheck \
|
|||
installcheck-am installdirs maintainer-clean \
|
|||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
|||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
|||
tags tags-am uninstall uninstall-am |
|||
|
|||
.PRECIOUS: Makefile |
|||
|
|||
|
|||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|||
.NOEXPORT: |
@ -0,0 +1,17 @@ |
|||
osm-gps-map example applications |
|||
* ./mapviewer |
|||
C based demo app with many options. See '--help' for a list. Note, this |
|||
must be executed from the examples directory so it can find the mapviewer.ui |
|||
file. |
|||
* ./polygon |
|||
This example demonstrates editable polygons. Vertex points can be dragged. |
|||
Clicking mid-points divides the line and creates another vertex. |
|||
* ./mapviewer.py |
|||
Python version of the C demo app, with examples showing how to do custom |
|||
layers. |
|||
* ./mapviewer.js |
|||
Javascript example using seed + gobject-introspection. If running uninstalled, |
|||
you probbably need to tell GObject introspection where to find the |
|||
bindings. Do the following from the example directory |
|||
# export LD_LIBRARY_PATH=../src/.libs/ |
|||
# export GI_TYPELIB_PATH=../src/ |
@ -0,0 +1,42 @@ |
|||
#include <gtk/gtk.h> |
|||
#include "osm-gps-map.h" |
|||
|
|||
int |
|||
main (int argc, |
|||
char *argv[]) |
|||
{ |
|||
OsmGpsMap *map; |
|||
GtkWidget *window; |
|||
|
|||
gtk_init (&argc, &argv); |
|||
|
|||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
|||
gtk_window_set_title (GTK_WINDOW (window), "Window"); |
|||
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); |
|||
|
|||
|
|||
map = g_object_new (OSM_TYPE_GPS_MAP, NULL); |
|||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(map)); |
|||
|
|||
OsmGpsMapTrack* track = osm_gps_map_track_new(); |
|||
|
|||
OsmGpsMapPoint* p1, *p2; |
|||
p1 = osm_gps_map_point_new_radians(1.25663706, -0.488692191); |
|||
p2 = osm_gps_map_point_new_radians(1.06465084, -0.750491578); |
|||
|
|||
osm_gps_map_track_add_point(track, p1); |
|||
osm_gps_map_track_add_point(track, p2); |
|||
|
|||
g_object_set(track, "editable", TRUE, NULL); |
|||
|
|||
osm_gps_map_track_add(map, track); |
|||
|
|||
gtk_widget_show (GTK_WIDGET(map)); |
|||
gtk_widget_show (window); |
|||
|
|||
gtk_main (); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
|
@ -0,0 +1,7 @@ |
|||
#!/bin/sh |
|||
|
|||
export LD_LIBRARY_PATH=../src/.libs/ |
|||
export GI_TYPELIB_PATH=$GI_TYPELIB_PATH:../src/ |
|||
export PYTHONPATH=../python/ |
|||
|
|||
$1 |
@ -0,0 +1,450 @@ |
|||
/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ |
|||
/* vim:set et sw=4 ts=4 cino=t0,(0: */ |
|||
/*
|
|||
* main.c |
|||
* Copyright (C) John Stowers 2008 <john.stowers@gmail.com> |
|||
* |
|||
* This is free software: you can redistribute it and/or modify it |
|||
* under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; version 2. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#include <stdlib.h> |
|||
#include <math.h> |
|||
#include <glib.h> |
|||
#include <gtk/gtk.h> |
|||
#include <gdk/gdkkeysyms.h> |
|||
|
|||
#include "osm-gps-map.h" |
|||
|
|||
static OsmGpsMapSource_t opt_map_provider = OSM_GPS_MAP_SOURCE_OPENSTREETMAP; |
|||
static gboolean opt_friendly_cache = FALSE; |
|||
static gboolean opt_no_cache = FALSE; |
|||
static char *opt_cache_base_dir = NULL; |
|||
static gboolean opt_editable_tracks = FALSE; |
|||
static GOptionEntry entries[] = |
|||
{ |
|||
{"friendly-cache", 'f', 0, G_OPTION_ARG_NONE, &opt_friendly_cache, "Store maps using friendly cache style (source name)", NULL}, |
|||
{"no-cache", 'n', 0, G_OPTION_ARG_NONE, &opt_no_cache, "Disable cache", NULL}, |
|||
{"cache-basedir", 'b', 0, G_OPTION_ARG_FILENAME, &opt_cache_base_dir, "Cache basedir", NULL}, |
|||
{"map", 'm', 0, G_OPTION_ARG_INT, &opt_map_provider, "Map source", "N"}, |
|||
{"editable-tracks", 'e', 0, G_OPTION_ARG_NONE, &opt_editable_tracks, "Make the tracks editable", NULL}, |
|||
{NULL}}; |
|||
|
|||
#if !GTK_CHECK_VERSION(3, 22, 0) |
|||
// use --gtk-debug=updates instead on newer GTK
|
|||
static gboolean opt_debug = FALSE; |
|||
static GOptionEntry debug_entries[] = |
|||
{ |
|||
{"debug", 'd', 0, G_OPTION_ARG_NONE, &opt_debug, "Enable debugging", NULL}, |
|||
{NULL}}; |
|||
#endif |
|||
|
|||
static GdkPixbuf *g_star_image = NULL; |
|||
static OsmGpsMapImage *g_last_image = NULL; |
|||
|
|||
static gboolean |
|||
on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) |
|||
{ |
|||
OsmGpsMapPoint coord; |
|||
float lat, lon; |
|||
OsmGpsMap *map = OSM_GPS_MAP(widget); |
|||
OsmGpsMapTrack *othertrack = OSM_GPS_MAP_TRACK(user_data); |
|||
|
|||
int left_button = (event->button == 1) && (event->state == 0); |
|||
int middle_button = (event->button == 2) || ((event->button == 1) && (event->state & GDK_SHIFT_MASK)); |
|||
int right_button = (event->button == 3) || ((event->button == 1) && (event->state & GDK_CONTROL_MASK)); |
|||
|
|||
osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, &coord); |
|||
osm_gps_map_point_get_degrees(&coord, &lat, &lon); |
|||
|
|||
if (event->type == GDK_3BUTTON_PRESS) |
|||
{ |
|||
if (middle_button) |
|||
{ |
|||
if (g_last_image) |
|||
osm_gps_map_image_remove(map, g_last_image); |
|||
} |
|||
if (right_button) |
|||
{ |
|||
osm_gps_map_track_remove(map, othertrack); |
|||
} |
|||
} |
|||
else if (event->type == GDK_2BUTTON_PRESS) |
|||
{ |
|||
if (left_button) |
|||
{ |
|||
osm_gps_map_gps_add(map, |
|||
lat, |
|||
lon, |
|||
g_random_double_range(0, 360)); |
|||
} |
|||
if (middle_button) |
|||
{ |
|||
g_last_image = osm_gps_map_image_add(map, |
|||
lat, |
|||
lon, |
|||
g_star_image); |
|||
} |
|||
if (right_button) |
|||
{ |
|||
osm_gps_map_track_add_point(othertrack, &coord); |
|||
} |
|||
} |
|||
|
|||
return FALSE; |
|||
} |
|||
|
|||
static gboolean |
|||
on_map_changed_event(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
float lat, lon; |
|||
GtkEntry *entry = GTK_ENTRY(user_data); |
|||
OsmGpsMap *map = OSM_GPS_MAP(widget); |
|||
|
|||
g_object_get(map, "latitude", &lat, "longitude", &lon, NULL); |
|||
gchar *msg = g_strdup_printf("Map Centre: lattitude %f longitude %f", lat, lon); |
|||
gtk_entry_set_text(entry, msg); |
|||
g_free(msg); |
|||
|
|||
return FALSE; |
|||
} |
|||
|
|||
static gboolean |
|||
on_zoom_in_clicked_event(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
int zoom; |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
g_object_get(map, "zoom", &zoom, NULL); |
|||
osm_gps_map_set_zoom(map, zoom + 1); |
|||
return FALSE; |
|||
} |
|||
|
|||
static gboolean |
|||
on_zoom_out_clicked_event(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
int zoom; |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
g_object_get(map, "zoom", &zoom, NULL); |
|||
osm_gps_map_set_zoom(map, zoom - 1); |
|||
return FALSE; |
|||
} |
|||
|
|||
static gboolean |
|||
on_home_clicked_event(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
osm_gps_map_set_center_and_zoom(map, -43.5326, 172.6362, 12); |
|||
return FALSE; |
|||
} |
|||
|
|||
static gboolean |
|||
on_cache_clicked_event(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) |
|||
{ |
|||
int zoom, max_zoom; |
|||
OsmGpsMapPoint pt1, pt2; |
|||
osm_gps_map_get_bbox(map, &pt1, &pt2); |
|||
g_object_get(map, "zoom", &zoom, "max-zoom", &max_zoom, NULL); |
|||
osm_gps_map_download_maps(map, &pt1, &pt2, zoom, max_zoom); |
|||
} |
|||
else |
|||
{ |
|||
osm_gps_map_download_cancel_all(map); |
|||
} |
|||
return FALSE; |
|||
} |
|||
|
|||
static void |
|||
on_tiles_queued_changed(OsmGpsMap *image, GParamSpec *pspec, gpointer user_data) |
|||
{ |
|||
gchar *s; |
|||
int tiles; |
|||
GtkLabel *label = GTK_LABEL(user_data); |
|||
g_object_get(image, "tiles-queued", &tiles, NULL); |
|||
s = g_strdup_printf("%d", tiles); |
|||
gtk_label_set_text(label, s); |
|||
g_free(s); |
|||
} |
|||
|
|||
static void |
|||
on_gps_alpha_changed(GtkAdjustment *adjustment, gpointer user_data) |
|||
{ |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
OsmGpsMapTrack *track = osm_gps_map_gps_get_track(map); |
|||
float f = gtk_adjustment_get_value(adjustment); |
|||
g_object_set(track, "alpha", f, NULL); |
|||
} |
|||
|
|||
static void |
|||
on_gps_width_changed(GtkAdjustment *adjustment, gpointer user_data) |
|||
{ |
|||
OsmGpsMap *map = OSM_GPS_MAP(user_data); |
|||
OsmGpsMapTrack *track = osm_gps_map_gps_get_track(map); |
|||
float f = gtk_adjustment_get_value(adjustment); |
|||
g_object_set(track, "line-width", f, NULL); |
|||
} |
|||
|
|||
static void |
|||
on_star_align_changed(GtkAdjustment *adjustment, gpointer user_data) |
|||
{ |
|||
const char *propname = user_data; |
|||
float f = gtk_adjustment_get_value(adjustment); |
|||
if (g_last_image) |
|||
g_object_set(g_last_image, propname, f, NULL); |
|||
} |
|||
|
|||
#if GTK_CHECK_VERSION(3, 4, 0) |
|||
static void |
|||
on_gps_color_changed(GtkColorChooser *widget, gpointer user_data) |
|||
{ |
|||
GdkRGBA c; |
|||
OsmGpsMapTrack *track = OSM_GPS_MAP_TRACK(user_data); |
|||
gtk_color_chooser_get_rgba(widget, &c); |
|||
osm_gps_map_track_set_color(track, &c); |
|||
} |
|||
#else |
|||
static void |
|||
on_gps_color_changed(GtkColorButton *widget, gpointer user_data) |
|||
{ |
|||
GdkRGBA c; |
|||
OsmGpsMapTrack *track = OSM_GPS_MAP_TRACK(user_data); |
|||
gtk_color_button_get_rgba(widget, &c); |
|||
osm_gps_map_track_set_color(track, &c); |
|||
} |
|||
|
|||
#endif |
|||
|
|||
static void |
|||
on_close(GtkWidget *widget, gpointer user_data) |
|||
{ |
|||
gtk_widget_destroy(widget); |
|||
gtk_main_quit(); |
|||
} |
|||
|
|||
static void |
|||
usage(GOptionContext *context) |
|||
{ |
|||
int i; |
|||
|
|||
puts(g_option_context_get_help(context, TRUE, NULL)); |
|||
|
|||
printf("Valid map sources:\n"); |
|||
for (i = OSM_GPS_MAP_SOURCE_NULL; i <= OSM_GPS_MAP_SOURCE_LAST; i++) |
|||
{ |
|||
const char *name = osm_gps_map_source_get_friendly_name(i); |
|||
const char *uri = osm_gps_map_source_get_repo_uri(i); |
|||
if (uri != NULL) |
|||
printf("\t%d:\t%s\n", i, name); |
|||
} |
|||
} |
|||
|
|||
int main(int argc, char **argv) |
|||
{ |
|||
GtkBuilder *builder; |
|||
GtkWidget *widget; |
|||
GtkAccelGroup *ag; |
|||
OsmGpsMap *map; |
|||
OsmGpsMapLayer *osd; |
|||
OsmGpsMapTrack *rightclicktrack; |
|||
const char *repo_uri; |
|||
char *cachedir, *cachebasedir; |
|||
GError *error = NULL; |
|||
GOptionContext *context; |
|||
|
|||
gtk_init(&argc, &argv); |
|||
|
|||
context = g_option_context_new("- Map browser"); |
|||
g_option_context_set_help_enabled(context, FALSE); |
|||
g_option_context_add_main_entries(context, entries, NULL); |
|||
#if !GTK_CHECK_VERSION(3, 22, 0) |
|||
g_option_context_add_main_entries(context, debug_entries, NULL); |
|||
#endif |
|||
|
|||
if (!g_option_context_parse(context, &argc, &argv, &error)) |
|||
{ |
|||
usage(context); |
|||
return 1; |
|||
} |
|||
|
|||
/* Only use the repo_uri to check if the user has supplied a
|
|||
valid map source ID */ |
|||
repo_uri = osm_gps_map_source_get_repo_uri(opt_map_provider); |
|||
if (repo_uri == NULL) |
|||
{ |
|||
usage(context); |
|||
return 2; |
|||
} |
|||
|
|||
cachebasedir = osm_gps_map_get_default_cache_directory(); |
|||
|
|||
if (opt_cache_base_dir && g_file_test(opt_cache_base_dir, G_FILE_TEST_IS_DIR)) |
|||
{ |
|||
cachedir = g_strdup(OSM_GPS_MAP_CACHE_AUTO); |
|||
cachebasedir = g_strdup(opt_cache_base_dir); |
|||
} |
|||
else if (opt_friendly_cache) |
|||
{ |
|||
cachedir = g_strdup(OSM_GPS_MAP_CACHE_FRIENDLY); |
|||
} |
|||
else if (opt_no_cache) |
|||
{ |
|||
cachedir = g_strdup(OSM_GPS_MAP_CACHE_DISABLED); |
|||
} |
|||
else |
|||
{ |
|||
cachedir = g_strdup(OSM_GPS_MAP_CACHE_AUTO); |
|||
} |
|||
|
|||
#if !GTK_CHECK_VERSION(3, 22, 0) |
|||
// use --gtk-debug=updates on newer gtk
|
|||
if (opt_debug) |
|||
gdk_window_set_debug_updates(TRUE); |
|||
#endif |
|||
|
|||
printf("Map Cache Dir: %s", cachedir); |
|||
printf("Map Provider: %s (%d)", osm_gps_map_source_get_friendly_name(opt_map_provider), opt_map_provider); |
|||
|
|||
map = g_object_new(OSM_TYPE_GPS_MAP, |
|||
"map-source", opt_map_provider, |
|||
"tile-cache", cachedir, |
|||
"tile-cache-base", cachebasedir, |
|||
"proxy-uri", g_getenv("http_proxy"), |
|||
"user-agent", "mapviewer.c", // Always set user-agent, for better tile-usage compliance
|
|||
NULL); |
|||
|
|||
osd = g_object_new(OSM_TYPE_GPS_MAP_OSD, |
|||
"show-scale", TRUE, |
|||
"show-coordinates", TRUE, |
|||
"show-crosshair", TRUE, |
|||
"show-dpad", TRUE, |
|||
"show-zoom", TRUE, |
|||
"show-gps-in-dpad", TRUE, |
|||
"show-gps-in-zoom", FALSE, |
|||
"dpad-radius", 30, |
|||
NULL); |
|||
osm_gps_map_layer_add(OSM_GPS_MAP(map), osd); |
|||
g_object_unref(G_OBJECT(osd)); |
|||
|
|||
// Add a second track for right clicks
|
|||
rightclicktrack = osm_gps_map_track_new(); |
|||
|
|||
if (opt_editable_tracks) |
|||
g_object_set(rightclicktrack, "editable", TRUE, NULL); |
|||
osm_gps_map_track_add(OSM_GPS_MAP(map), rightclicktrack); |
|||
|
|||
g_free(cachedir); |
|||
g_free(cachebasedir); |
|||
|
|||
// Enable keyboard navigation
|
|||
osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_FULLSCREEN, GDK_KEY_F11); |
|||
osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_UP, GDK_KEY_Up); |
|||
osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_DOWN, GDK_KEY_Down); |
|||
osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_LEFT, GDK_KEY_Left); |
|||
osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_RIGHT, GDK_KEY_Right); |
|||
|
|||
// Build the UI
|
|||
g_star_image = gdk_pixbuf_new_from_file_at_size("poi.png", 24, 24, NULL); |
|||
|
|||
builder = gtk_builder_new(); |
|||
gtk_builder_add_from_file(builder, "mapviewer.ui", &error); |
|||
if (error) |
|||
g_error("ERROR: %s\n", error->message); |
|||
|
|||
gtk_box_pack_start( |
|||
GTK_BOX(gtk_builder_get_object(builder, "map_box")), |
|||
GTK_WIDGET(map), TRUE, TRUE, 0); |
|||
|
|||
// Init values
|
|||
float lw, a; |
|||
GdkRGBA c; |
|||
OsmGpsMapTrack *gpstrack = osm_gps_map_gps_get_track(map); |
|||
g_object_get(gpstrack, "line-width", &lw, "alpha", &a, NULL); |
|||
osm_gps_map_track_get_color(gpstrack, &c); |
|||
gtk_adjustment_set_value( |
|||
GTK_ADJUSTMENT(gtk_builder_get_object(builder, "gps_width_adjustment")), |
|||
lw); |
|||
gtk_adjustment_set_value( |
|||
GTK_ADJUSTMENT(gtk_builder_get_object(builder, "gps_alpha_adjustment")), |
|||
a); |
|||
gtk_adjustment_set_value( |
|||
GTK_ADJUSTMENT(gtk_builder_get_object(builder, "star_xalign_adjustment")), |
|||
0.5); |
|||
gtk_adjustment_set_value( |
|||
GTK_ADJUSTMENT(gtk_builder_get_object(builder, "star_yalign_adjustment")), |
|||
0.5); |
|||
#if GTK_CHECK_VERSION(3, 4, 0) |
|||
gtk_color_chooser_set_rgba( |
|||
GTK_COLOR_CHOOSER(gtk_builder_get_object(builder, "gps_colorbutton")), |
|||
&c); |
|||
#else |
|||
gtk_color_button_set_rgba( |
|||
GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "gps_colorbutton")), |
|||
&c); |
|||
#endif |
|||
|
|||
// Connect to signals
|
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "gps_colorbutton"), "color-set", |
|||
G_CALLBACK(on_gps_color_changed), (gpointer)gpstrack); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "zoom_in_button"), "clicked", |
|||
G_CALLBACK(on_zoom_in_clicked_event), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "zoom_out_button"), "clicked", |
|||
G_CALLBACK(on_zoom_out_clicked_event), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "home_button"), "clicked", |
|||
G_CALLBACK(on_home_clicked_event), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "cache_button"), "clicked", |
|||
G_CALLBACK(on_cache_clicked_event), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "gps_alpha_adjustment"), "value-changed", |
|||
G_CALLBACK(on_gps_alpha_changed), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "gps_width_adjustment"), "value-changed", |
|||
G_CALLBACK(on_gps_width_changed), (gpointer)map); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "star_xalign_adjustment"), "value-changed", |
|||
G_CALLBACK(on_star_align_changed), (gpointer) "x-align"); |
|||
g_signal_connect( |
|||
gtk_builder_get_object(builder, "star_yalign_adjustment"), "value-changed", |
|||
G_CALLBACK(on_star_align_changed), (gpointer) "y-align"); |
|||
g_signal_connect(G_OBJECT(map), "button-press-event", |
|||
G_CALLBACK(on_button_press_event), (gpointer)rightclicktrack); |
|||
g_signal_connect(G_OBJECT(map), "changed", |
|||
G_CALLBACK(on_map_changed_event), |
|||
(gpointer)gtk_builder_get_object(builder, "text_entry")); |
|||
g_signal_connect(G_OBJECT(map), "notify::tiles-queued", |
|||
G_CALLBACK(on_tiles_queued_changed), |
|||
(gpointer)gtk_builder_get_object(builder, "cache_label")); |
|||
|
|||
widget = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); |
|||
g_signal_connect(widget, "destroy", |
|||
G_CALLBACK(on_close), (gpointer)map); |
|||
// Setup accelerators.
|
|||
ag = gtk_accel_group_new(); |
|||
gtk_accel_group_connect(ag, GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_MASK, |
|||
g_cclosure_new(gtk_main_quit, NULL, NULL)); |
|||
gtk_accel_group_connect(ag, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_MASK, |
|||
g_cclosure_new(gtk_main_quit, NULL, NULL)); |
|||
gtk_window_add_accel_group(GTK_WINDOW(widget), ag); |
|||
|
|||
gtk_widget_show_all(widget); |
|||
|
|||
g_log_set_handler("OsmGpsMap", G_LOG_LEVEL_MASK, g_log_default_handler, NULL); |
|||
gtk_main(); |
|||
|
|||
return 0; |
|||
} |
@ -0,0 +1,34 @@ |
|||
#!/usr/bin/seed
|
|||
|
|||
// You probbably need to tell GObject introspection where to find the bindings
|
|||
// export LD_LIBRARY_PATH=../src/.libs/
|
|||
// export GI_TYPELIB_PATH=../src/
|
|||
|
|||
const Gtk = imports.gi.Gtk; |
|||
const Osm = imports.gi.OsmGpsMap; |
|||
|
|||
Gtk.init(0, null); |
|||
|
|||
var win = new Gtk.Window({ type: Gtk.WindowType.TOPLEVEL }); |
|||
win.set_border_width(10); |
|||
win.set_default_size(400,400); |
|||
|
|||
// ARRRGGGHHHHH GNOME
|
|||
if (0) |
|||
// GJS makes me do this
|
|||
win.connect("delete-event", Gtk.main_quit); |
|||
else |
|||
// Seed makes me do this
|
|||
win.signal.delete_event.connect(Gtk.main_quit); |
|||
|
|||
var map = new Osm.OsmGpsMap() |
|||
var osd = new Osm.Osd() |
|||
|
|||
map.layer_add(osd) |
|||
win.add(map); |
|||
|
|||
win.show_all(); |
|||
|
|||
Gtk.main(); |
|||
|
|||
|
@ -0,0 +1,299 @@ |
|||
#!/usr/bin/env python3 |
|||
|
|||
""" |
|||
Copyright (C) Hadley Rich 2008 <hads@nice.net.nz> |
|||
based on main.c - with thanks to John Stowers |
|||
|
|||
This is free software: you can redistribute it and/or modify it |
|||
under the terms of the GNU General Public License |
|||
as published by the Free Software Foundation; version 2. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, see <http://www.gnu.org/licenses/>. |
|||
""" |
|||
|
|||
import random |
|||
import gi |
|||
|
|||
gi.require_version("Gdk", "3.0") |
|||
gi.require_version("Gtk", "3.0") |
|||
gi.require_version("OsmGpsMap", "1.0") |
|||
|
|||
from gi.repository import ( |
|||
Gdk, |
|||
GdkPixbuf, |
|||
GLib, |
|||
GObject, |
|||
Gtk, |
|||
OsmGpsMap as osmgpsmap, |
|||
) # noqa |
|||
|
|||
print(f"using library: {osmgpsmap.__file__} (version {osmgpsmap._version})") |
|||
|
|||
assert osmgpsmap._version == "1.0" |
|||
|
|||
class DummyMapNoGpsPoint(osmgpsmap.Map): |
|||
def do_draw_gps_point(self, drawable): |
|||
pass |
|||
|
|||
|
|||
GObject.type_register(DummyMapNoGpsPoint) |
|||
|
|||
|
|||
class DummyLayer(GObject.GObject, osmgpsmap.MapLayer): |
|||
def __init__(self): |
|||
GObject.GObject.__init__(self) |
|||
|
|||
def do_draw(self, gpsmap, gdkdrawable): |
|||
pass |
|||
|
|||
def do_render(self, gpsmap): |
|||
pass |
|||
|
|||
def do_busy(self): |
|||
return False |
|||
|
|||
def do_button_press(self, gpsmap, gdkeventbutton): |
|||
return False |
|||
|
|||
|
|||
GObject.type_register(DummyLayer) |
|||
|
|||
|
|||
class UI(Gtk.Window): |
|||
def __init__(self): |
|||
Gtk.Window.__init__(self, type=Gtk.WindowType.TOPLEVEL) |
|||
|
|||
self.set_default_size(500, 500) |
|||
self.connect("destroy", lambda x: Gtk.main_quit()) |
|||
self.set_title("OpenStreetMap GPS Mapper") |
|||
|
|||
self.vbox = Gtk.VBox(homogeneous=False, spacing=0) |
|||
self.add(self.vbox) |
|||
|
|||
if 0: |
|||
self.osm = DummyMapNoGpsPoint() |
|||
else: |
|||
self.osm = osmgpsmap.Map() |
|||
self.osm.layer_add( |
|||
osmgpsmap.MapOsd(show_dpad=True, |
|||
show_zoom=True, |
|||
show_crosshair=True) |
|||
) |
|||
self.osm.set_property("map-source", osmgpsmap.MapSource_t.OPENSTREETMAP) |
|||
self.osm.layer_add(DummyLayer()) |
|||
|
|||
self.last_image = None |
|||
|
|||
self.osm.connect("button_press_event", self.on_button_press) |
|||
self.osm.connect("changed", self.on_map_change) |
|||
|
|||
# connect keyboard shortcuts |
|||
self.osm.set_keyboard_shortcut( |
|||
osmgpsmap.MapKey_t.FULLSCREEN, Gdk.keyval_from_name("F11") |
|||
) |
|||
self.osm.set_keyboard_shortcut( |
|||
osmgpsmap.MapKey_t.UP, Gdk.keyval_from_name("Up") |
|||
) |
|||
self.osm.set_keyboard_shortcut( |
|||
osmgpsmap.MapKey_t.DOWN, Gdk.keyval_from_name("Down") |
|||
) |
|||
self.osm.set_keyboard_shortcut( |
|||
osmgpsmap.MapKey_t.LEFT, Gdk.keyval_from_name("Left") |
|||
) |
|||
self.osm.set_keyboard_shortcut( |
|||
osmgpsmap.MapKey_t.RIGHT, Gdk.keyval_from_name("Right") |
|||
) |
|||
|
|||
# connect to tooltip |
|||
self.osm.props.has_tooltip = True |
|||
self.osm.connect("query-tooltip", self.on_query_tooltip) |
|||
|
|||
self.latlon_entry = Gtk.Entry() |
|||
|
|||
zoom_in_button = Gtk.Button.new_from_icon_name("zoom-in", |
|||
Gtk.IconSize.BUTTON) |
|||
zoom_in_button.connect("clicked", self.zoom_in_clicked) |
|||
zoom_out_button = Gtk.Button.new_from_icon_name("zoom-out", |
|||
Gtk.IconSize.BUTTON) |
|||
zoom_out_button.connect("clicked", self.zoom_out_clicked) |
|||
home_button = Gtk.Button.new_from_icon_name("go-home", |
|||
Gtk.IconSize.BUTTON) |
|||
home_button.connect("clicked", self.home_clicked) |
|||
cache_button = Gtk.Button(label="Cache") |
|||
cache_button.connect("clicked", self.cache_clicked) |
|||
|
|||
self.vbox.pack_start(self.osm, True, True, 0) |
|||
hbox = Gtk.HBox(homogeneous=False, spacing=0) |
|||
hbox.pack_start(zoom_in_button, False, True, 0) |
|||
hbox.pack_start(zoom_out_button, False, True, 0) |
|||
hbox.pack_start(home_button, False, True, 0) |
|||
hbox.pack_start(cache_button, False, True, 0) |
|||
|
|||
# add ability to test custom map URIs |
|||
ex = Gtk.Expander(label="<b>Map Repository URI</b>") |
|||
ex.props.use_markup = True |
|||
vb = Gtk.VBox() |
|||
self.repouri_entry = Gtk.Entry() |
|||
self.repouri_entry.set_text(self.osm.props.repo_uri) |
|||
self.image_format_entry = Gtk.Entry() |
|||
self.image_format_entry.set_text(self.osm.props.image_format) |
|||
|
|||
lbl = Gtk.Label( |
|||
label="""Enter an repository URL to fetch map tiles \ |
|||
from in the box below. Special metacharacters may be included in this url |
|||
|
|||
<i>Metacharacters:</i> |
|||
\t#X\tMax X location |
|||
\t#Y\tMax Y location |
|||
\t#Z\tMap zoom (0 = min zoom, fully zoomed out) |
|||
\t#S\tInverse zoom (max-zoom - #Z) |
|||
\t#Q\tQuadtree encoded tile (qrts) |
|||
\t#W\tQuadtree encoded tile (1234) |
|||
\t#U\tEncoding not implemeted |
|||
\t#R\tRandom integer, 0-4""" |
|||
) |
|||
lbl.props.xalign = 0 |
|||
lbl.props.use_markup = True |
|||
lbl.props.wrap = True |
|||
|
|||
ex.add(vb) |
|||
vb.pack_start(lbl, False, True, 0) |
|||
|
|||
hb = Gtk.HBox() |
|||
hb.pack_start(Gtk.Label(label="URI: "), False, True, 0) |
|||
hb.pack_start(self.repouri_entry, True, True, 0) |
|||
vb.pack_start(hb, False, True, 0) |
|||
|
|||
hb = Gtk.HBox() |
|||
hb.pack_start(Gtk.Label(label="Image Format: "), False, True, 0) |
|||
hb.pack_start(self.image_format_entry, True, True, 0) |
|||
vb.pack_start(hb, False, True, 0) |
|||
|
|||
gobtn = Gtk.Button(label="Load Map URI") |
|||
gobtn.connect("clicked", self.load_map_clicked) |
|||
vb.pack_start(gobtn, False, True, 0) |
|||
|
|||
self.show_tooltips = False |
|||
cb = Gtk.CheckButton(label="Show Location in Tooltips") |
|||
cb.props.active = self.show_tooltips |
|||
cb.connect("toggled", self.on_show_tooltips_toggled) |
|||
self.vbox.pack_end(cb, False, True, 0) |
|||
|
|||
cb = Gtk.CheckButton(label="Disable Cache") |
|||
cb.props.active = False |
|||
cb.connect("toggled", self.disable_cache_toggled) |
|||
self.vbox.pack_end(cb, False, True, 0) |
|||
|
|||
self.vbox.pack_end(ex, False, True, 0) |
|||
self.vbox.pack_end(self.latlon_entry, False, True, 0) |
|||
self.vbox.pack_end(hbox, False, True, 0) |
|||
|
|||
GLib.timeout_add(500, self.print_tiles) |
|||
|
|||
def disable_cache_toggled(self, btn): |
|||
if btn.props.active: |
|||
self.osm.props.tile_cache = osmgpsmap.MAP_CACHE_DISABLED |
|||
else: |
|||
self.osm.props.tile_cache = osmgpsmap.MAP_CACHE_AUTO |
|||
|
|||
def on_show_tooltips_toggled(self, btn): |
|||
self.show_tooltips = btn.props.active |
|||
|
|||
def load_map_clicked(self, button): |
|||
uri = self.repouri_entry.get_text() |
|||
format = self.image_format_entry.get_text() |
|||
if uri and format: |
|||
if self.osm: |
|||
# remove old map |
|||
self.vbox.remove(self.osm) |
|||
try: |
|||
self.osm = osmgpsmap.Map(repo_uri=uri, image_format=format) |
|||
except Exception as e: |
|||
print("ERROR:", e) |
|||
self.osm = osmgpsmap.Map() |
|||
|
|||
self.vbox.pack_start(self.osm, True, True, 0) |
|||
self.osm.show() |
|||
|
|||
def print_tiles(self): |
|||
if self.osm.props.tiles_queued != 0: |
|||
print(self.osm.props.tiles_queued, "tiles queued") |
|||
return True |
|||
|
|||
def zoom_in_clicked(self, button): |
|||
self.osm.set_zoom(self.osm.props.zoom + 1) |
|||
|
|||
def zoom_out_clicked(self, button): |
|||
self.osm.set_zoom(self.osm.props.zoom - 1) |
|||
|
|||
def home_clicked(self, button): |
|||
self.osm.set_center_and_zoom(-44.39, 171.25, 12) |
|||
|
|||
def on_query_tooltip(self, widget, x, y, keyboard_tip, tooltip, data=None): |
|||
if keyboard_tip: |
|||
return False |
|||
|
|||
if self.show_tooltips: |
|||
p = osmgpsmap.point_new_degrees(0.0, 0.0) |
|||
self.osm.convert_screen_to_geographic(x, y, p) |
|||
lat, lon = p.get_degrees() |
|||
tooltip.set_markup(f"{lat:+.4f}, {lon:+.4f}") |
|||
return True |
|||
|
|||
return False |
|||
|
|||
def cache_clicked(self, button): |
|||
bbox = self.osm.get_bbox() |
|||
self.osm.download_maps( |
|||
*bbox, |
|||
zoom_start=self.osm.props.zoom, |
|||
zoom_end=self.osm.props.max_zoom |
|||
) |
|||
|
|||
def on_map_change(self, osm): |
|||
self.latlon_entry.set_text( |
|||
f"Map Centre: latitude {self.osm.props.latitude} " |
|||
f"longitude {self.osm.props.longitude}" |
|||
) |
|||
|
|||
def on_button_press(self, osm, event): |
|||
state = event.get_state() |
|||
lat, lon = self.osm.get_event_location(event).get_degrees() |
|||
|
|||
left = event.button == 1 and state == 0 |
|||
middle = event.button == 2 or ( |
|||
event.button == 1 and state & Gdk.ModifierType.SHIFT_MASK |
|||
) |
|||
right = event.button == 3 or ( |
|||
event.button == 1 and state & Gdk.ModifierType.CONTROL_MASK |
|||
) |
|||
|
|||
# work around binding bug with invalid variable name |
|||
GDK_2BUTTON_PRESS = getattr(Gdk.EventType, "2BUTTON_PRESS") |
|||
GDK_3BUTTON_PRESS = getattr(Gdk.EventType, "3BUTTON_PRESS") |
|||
|
|||
if event.type == GDK_3BUTTON_PRESS: |
|||
if middle: |
|||
if self.last_image is not None: |
|||
self.osm.image_remove(self.last_image) |
|||
self.last_image = None |
|||
elif event.type == GDK_2BUTTON_PRESS: |
|||
if left: |
|||
self.osm.gps_add(lat, lon, heading=random.random() * 360) |
|||
if middle: |
|||
pb = GdkPixbuf.Pixbuf.new_from_file_at_size("poi.png", 24, 24) |
|||
self.last_image = self.osm.image_add(lat, lon, pb) |
|||
if right: |
|||
pass |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
u = UI() |
|||
u.show_all() |
|||
Gtk.main() |
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,47 @@ |
|||
#include <gtk/gtk.h> |
|||
#include "osm-gps-map.h" |
|||
|
|||
int |
|||
main (int argc, |
|||
char *argv[]) |
|||
{ |
|||
OsmGpsMap *map; |
|||
OsmGpsMapPolygon* poly; |
|||
GtkWidget *window; |
|||
|
|||
gtk_init (&argc, &argv); |
|||
|
|||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
|||
gtk_window_set_title (GTK_WINDOW (window), "Window"); |
|||
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); |
|||
|
|||
|
|||
map = g_object_new (OSM_TYPE_GPS_MAP, NULL); |
|||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(map)); |
|||
|
|||
poly = osm_gps_map_polygon_new(); |
|||
OsmGpsMapTrack* polytrack = osm_gps_map_track_new(); |
|||
|
|||
OsmGpsMapPoint* p1, *p2, *p3; |
|||
p1 = osm_gps_map_point_new_radians(1.25663706, -0.488692191); |
|||
p2 = osm_gps_map_point_new_radians(1.06465084, -0.750491578); |
|||
p3 = osm_gps_map_point_new_radians(1.064650849, -0.191986218); |
|||
|
|||
osm_gps_map_track_add_point(polytrack, p1); |
|||
osm_gps_map_track_add_point(polytrack, p2); |
|||
osm_gps_map_track_add_point(polytrack, p3); |
|||
|
|||
g_object_set(poly, "track", polytrack, NULL); |
|||
g_object_set(poly, "editable", TRUE, NULL); |
|||
|
|||
osm_gps_map_polygon_add(map, poly); |
|||
|
|||
gtk_widget_show (GTK_WIDGET(map)); |
|||
gtk_widget_show (window); |
|||
|
|||
gtk_main (); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
|
Loading…
Reference in new issue