changed map_code
This commit is contained in:
parent
01b4ec7146
commit
c6926c8baa
|
@ -296,22 +296,17 @@ void assign_df_to_TSB(struct data_frame *df,int index) {
|
||||||
|
|
||||||
void dispatch(int index) {
|
void dispatch(int index) {
|
||||||
|
|
||||||
int size,flag = 0;
|
int size;
|
||||||
sort_data_inside_TSB(index);
|
sort_data_inside_TSB(index);
|
||||||
dataframe = NULL;
|
dataframe = NULL;
|
||||||
pthread_mutex_lock(&mutex_Upper_Layer_Details);
|
pthread_mutex_lock(&mutex_Upper_Layer_Details);
|
||||||
struct Upper_Layer_Details *temp_pdc = ULfirst;
|
struct Upper_Layer_Details *temp_pdc = ULfirst;
|
||||||
|
size = create_dataframe(index);
|
||||||
|
|
||||||
while(temp_pdc != NULL ) {
|
while(temp_pdc != NULL ) {
|
||||||
|
|
||||||
if((temp_pdc->UL_upper_pdc_cfgsent == 1) && (temp_pdc->UL_data_transmission_off == 0)) {
|
if((temp_pdc->UL_upper_pdc_cfgsent == 1) && (temp_pdc->UL_data_transmission_off == 0)) {
|
||||||
|
|
||||||
if(flag == 0) {
|
|
||||||
|
|
||||||
size = create_dataframe(index);
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(temp_pdc->config_change == 1) {
|
if(temp_pdc->config_change == 1) {
|
||||||
|
|
||||||
dataframe[14] = 0x04;
|
dataframe[14] = 0x04;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
|
@ -2182,12 +2182,13 @@ void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata)
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
res = gtk_dialog_run(GTK_DIALOG(ipdc_setup_window));
|
res = gtk_dialog_run(GTK_DIALOG(ipdc_setup_window));
|
||||||
|
printf("res = %d", res);
|
||||||
|
|
||||||
if(res == GTK_RESPONSE_ACCEPT)
|
if(res == GTK_RESPONSE_ACCEPT)
|
||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ipdc_setup_window));
|
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(ipdc_setup_window));
|
||||||
strcpy(ipdcFilePath, filename);
|
g_print("File selected: %s\n", filename);
|
||||||
view_setup_file(filename);
|
view_setup_file(filename);
|
||||||
g_free(filename);
|
g_free(filename);
|
||||||
}
|
}
|
||||||
|
@ -2224,7 +2225,7 @@ void view_setup_file (char *filename)
|
||||||
|
|
||||||
gtk_widget_destroy(ipdc_setup_window);
|
gtk_widget_destroy(ipdc_setup_window);
|
||||||
|
|
||||||
fp1 = fopen(s, "rb");
|
fp1 = fopen(filename, "rb");
|
||||||
|
|
||||||
if (fp1 == NULL)
|
if (fp1 == NULL)
|
||||||
{
|
{
|
||||||
|
@ -2279,7 +2280,7 @@ void view_setup_file (char *filename)
|
||||||
fclose (fp1);
|
fclose (fp1);
|
||||||
|
|
||||||
/* Open the iPDC Setup File in read mode */
|
/* Open the iPDC Setup File in read mode */
|
||||||
fp1 = fopen(s, "rb");
|
fp1 = fopen(filename, "rb");
|
||||||
|
|
||||||
/* If its available, then create a new dialog window for displaying the iPDC details. */
|
/* If its available, then create a new dialog window for displaying the iPDC details. */
|
||||||
setup_display_window = gtk_dialog_new ();
|
setup_display_window = gtk_dialog_new ();
|
||||||
|
@ -2296,7 +2297,7 @@ void view_setup_file (char *filename)
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||||
|
|
||||||
/* The dialog window is created with a vbox packed into it */
|
/* The dialog window is created with a vbox packed into it */
|
||||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(setup_display_window)), scrolled_window, TRUE, TRUE, 0);
|
gtk_box_pack_start (gtk_dialog_get_content_area(setup_display_window), scrolled_window, TRUE, TRUE, 0);
|
||||||
gtk_widget_show (scrolled_window);
|
gtk_widget_show (scrolled_window);
|
||||||
|
|
||||||
/* Create a table of ? by 2 squares */
|
/* Create a table of ? by 2 squares */
|
||||||
|
@ -2543,8 +2544,8 @@ void view_setup_file (char *filename)
|
||||||
/* This makes it so the ok_button is the default. */
|
/* This makes it so the ok_button is the default. */
|
||||||
gtk_widget_set_can_default (cancel_button, TRUE);
|
gtk_widget_set_can_default (cancel_button, TRUE);
|
||||||
gtk_widget_set_can_default (apply_button, TRUE);
|
gtk_widget_set_can_default (apply_button, TRUE);
|
||||||
gtk_box_pack_start (gtk_dialog_get_action_area, apply_button, TRUE, TRUE, 0);
|
gtk_box_pack_start (gtk_dialog_get_action_area(setup_display_window), apply_button, TRUE, TRUE, 0);
|
||||||
gtk_box_pack_start (gtk_dialog_get_action_area, cancel_button, TRUE, TRUE, 0);
|
gtk_box_pack_start (gtk_dialog_get_action_area(setup_display_window), cancel_button, TRUE, TRUE, 0);
|
||||||
|
|
||||||
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
|
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
|
||||||
gtk_widget_grab_default (cancel_button);
|
gtk_widget_grab_default (cancel_button);
|
||||||
|
|
|
@ -319,10 +319,10 @@ void* connect_pmu_tcp(void *temp) {
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (sendto(DB_sockfd,tcp_BUF, MAXBUFLEN-1, 0,
|
// if (sendto(DB_sockfd,tcp_BUF, MAXBUFLEN-1, 0,
|
||||||
(struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1) {
|
// (struct sockaddr *)&DB_Server_addr,sizeof(DB_Server_addr)) == -1) {
|
||||||
perror("sendto");
|
// perror("sendto");
|
||||||
}
|
// }
|
||||||
|
|
||||||
tcp_BUF[bytes_read] = '\0';
|
tcp_BUF[bytes_read] = '\0';
|
||||||
PMU_process_TCP(tcp_BUF,tcp_sockfd);
|
PMU_process_TCP(tcp_BUF,tcp_sockfd);
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
#include "align_sort.h"
|
#include "align_sort.h"
|
||||||
#include "connections.h"
|
#include "connections.h"
|
||||||
#include "recreate.h"
|
#include "recreate.h"
|
||||||
|
#include "utility_tools.h"
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------- */
|
||||||
/* FUNCTION cfgparser(): */
|
/* FUNCTION cfgparser(): */
|
||||||
|
@ -1269,6 +1269,23 @@ int dataparser(unsigned char data[]) {
|
||||||
//No match for configuration frame
|
//No match for configuration frame
|
||||||
printf("Configuration is not fresent for received data frame!\n");
|
printf("Configuration is not fresent for received data frame!\n");
|
||||||
}
|
}
|
||||||
|
printf("freq = %d\n",to_intconvertor(df->dpmu[0]->freq));
|
||||||
|
// temp code
|
||||||
|
int freq = to_intconvertor(df->dpmu[0]->freq);
|
||||||
|
if(util_map != NULL){
|
||||||
|
g_red_image = gdk_pixbuf_new_from_file_at_size ("red.png", 24,24,NULL);
|
||||||
|
g_green_image = gdk_pixbuf_new_from_file_at_size ("green.png", 24,24,NULL);
|
||||||
|
if(g_last_image != 0){
|
||||||
|
osm_gps_map_image_remove(util_map, g_last_image);
|
||||||
|
}
|
||||||
|
if (freq > 300){
|
||||||
|
g_last_image = osm_gps_map_image_add(util_map,15.518597, 74.925584, g_green_image);
|
||||||
|
}else{
|
||||||
|
g_last_image = osm_gps_map_image_add(util_map,15.518597, 74.925584, g_green_image);
|
||||||
|
}
|
||||||
|
gtk_widget_show_all(GTK_WIDGET(util_map));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if((config_change == 14) ||(config_change == 10))
|
if((config_change == 14) ||(config_change == 10))
|
||||||
return config_change;
|
return config_change;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
|
@ -1,8 +1,18 @@
|
||||||
#include<gtk/gtk.h>
|
#include<gtk/gtk.h>
|
||||||
#include "osm-gps-map.h"
|
#include "utility_tools.h"
|
||||||
|
|
||||||
#define UI_fILE "./utility_tools.ui"
|
#define UI_fILE "./utility_tools.ui"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// void change_image(OsmGpsMap *map, float lat, float lon, OsmGpsMapImage *image)
|
||||||
|
// {
|
||||||
|
// if (g_last_image)
|
||||||
|
// osm_gps_map_image_remove(map, g_last_image);
|
||||||
|
// osm_gps_map_image_add(map, lat, lon, image);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
void utility_tools(GtkButton *but, gpointer udata)
|
void utility_tools(GtkButton *but, gpointer udata)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
|
@ -13,16 +23,24 @@ void utility_tools(GtkButton *but, gpointer udata)
|
||||||
g_warning("%s", error->message);
|
g_warning("%s", error->message);
|
||||||
g_free(error);
|
g_free(error);
|
||||||
}
|
}
|
||||||
GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "util_window"));
|
window = GTK_WIDGET(gtk_builder_get_object(builder, "util_window"));
|
||||||
GtkContainer *map_container = GTK_CONTAINER(gtk_builder_get_object(builder, "map_layout"));
|
GtkContainer *map_container = GTK_CONTAINER(gtk_builder_get_object(builder, "map_layout"));
|
||||||
|
|
||||||
OsmGpsMap *map = g_object_new (OSM_TYPE_GPS_MAP,
|
|
||||||
"map-source", OSM_GPS_MAP_SOURCE_OPENSTREETMAP,
|
|
||||||
|
util_map = g_object_new (OSM_TYPE_GPS_MAP,
|
||||||
|
"map-source", OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID,
|
||||||
"tile-cache", "/tmp/",
|
"tile-cache", "/tmp/",
|
||||||
NULL);
|
NULL);
|
||||||
gtk_widget_set_size_request(GTK_WIDGET(map), 800, 600);
|
osm_gps_map_set_center_and_zoom (util_map, 15.4589, 75.0078, 10);
|
||||||
|
g_red_image = gdk_pixbuf_new_from_file_at_size ("red.png", 24,24,NULL);
|
||||||
|
g_green_image = gdk_pixbuf_new_from_file_at_size ("green.png", 24,24,NULL);
|
||||||
|
|
||||||
gtk_container_add(map_container, GTK_WIDGET(map));
|
// g_last_image = osm_gps_map_image_add(util_map,15.4589, 75.0078, g_red_image);
|
||||||
|
// g_last_image = osm_gps_map_image_add(util_map,15.518597, 74.925584, g_green_image);
|
||||||
|
gtk_widget_set_size_request(GTK_WIDGET(util_map), 600, 500);
|
||||||
|
|
||||||
|
gtk_container_add(map_container, GTK_WIDGET(util_map));
|
||||||
|
|
||||||
gtk_widget_show_all(window);
|
gtk_widget_show_all(window);
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include<gtk/gtk.h>
|
#include<gtk/gtk.h>
|
||||||
|
#include "osm-gps-map.h"
|
||||||
|
|
||||||
/* Convenience macros for obtaining objects from UI file */
|
/* Convenience macros for obtaining objects from UI file */
|
||||||
#define CH_GET_OBJECT(builder, name, type, data) \
|
#define CH_GET_OBJECT(builder, name, type, data) \
|
||||||
|
@ -6,4 +7,10 @@
|
||||||
#define CH_GET_WIDGET(builder, name, data) \
|
#define CH_GET_WIDGET(builder, name, data) \
|
||||||
CH_GET_OBJECT(builder, name, GTK_WIDGET, data)
|
CH_GET_OBJECT(builder, name, GTK_WIDGET, data)
|
||||||
|
|
||||||
|
OsmGpsMap *util_map;
|
||||||
|
GtkWidget *window;
|
||||||
|
static GdkPixbuf *g_red_image = NULL;
|
||||||
|
static GdkPixbuf *g_green_image = NULL;
|
||||||
|
static OsmGpsMapImage *g_last_image = NULL;
|
||||||
|
|
||||||
void utility_tools(GtkButton *but, gpointer udata);
|
void utility_tools(GtkButton *but, gpointer udata);
|
File diff suppressed because it is too large
Load Diff
|
@ -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()
|
Binary file not shown.
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