Overview
Examples
Screenshots
Comparisons
Applications
Download
Manual
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site









SourceForge.net Logo



GoogleMaps

 

Example using GoogleMaps static API to display the map of given location

 

 

GoogleMaps.h

 

#ifndef _GoogleMaps_GoogleMaps_h

#define _GoogleMaps_GoogleMaps_h

 

#include <CtrlLib/CtrlLib.h>

#include <Web/Web.h>

 

 

using namespace Upp;

 

#define LAYOUTFILE <GoogleMaps/GoogleMaps.lay>

#include <CtrlCore/lay.h>

 

#define IMAGECLASS GoogleMapsImg

#define IMAGEFILE <GoogleMaps/GoogleMaps.iml>

#include <Draw/iml_header.h>

 

void   SetGoogleMapsKey(const char *key);

String GetGoogleMap(double center_x, double center_y, int zoom, int cx, int cy,

                   const char *format = "png", String *error = NULL);

Image  GetGoogleMapImage(double center_x, double center_y, int zoom, int cx, int cy,

                        const char *format = "png", String *error = NULL);

double CvDeg(double deg, double minutes, double seconds);

 

Pointf GoogleMapsPixelToGps(Pointf center, int zoom, Point diff);

Pointf GoogleMapsPixelToGps(Pointf center, int zoom, Size sz, Point p);

Pointf GoogleMapsGpsToPixelDiff(Pointf center, int zoom, Pointf gps);

Pointf GoogleMapsGpsToPixel(Pointf center, int zoom, Size sz, Pointf gps);

 

Pointf ScanGPS(const char *s);

 

String FormatGPSX(double x);

String FormatGPSY(double y);

String FormatGPS(Pointf p);

 

bool MapDlg(Pointf& p);

 

#endif

 

 

 

Main.cpp

 

#include "GoogleMaps.h"

 

GUI_APP_MAIN {

    // Following key was obtained for U++ project, please get your owen key if you want to use

    // GoogleMaps API here (it is free): http://code.google.com/intl/cs/apis/maps/signup.html

    SetGoogleMapsKey("ABQIAAAAXHmSFgmVIbMZDJ5RhfPINBSBetkRueiarolywVmVT7jJWZRGvBQFIvrtty50ivBLt4YApjpEVXW8Hw");

    

    Pointf p(0, 51.477222);

    if(MapDlg(p))

        Exclamation("Marker position " + FormatGPS(p));

}

 

 

 

GoogleMaps.cpp

 

#include "GoogleMaps.h"

 

using namespace Upp;

 

#define LLOG(x) // LOG(x)

 

String apikey = "";

 

void SetGoogleMapsKey(const char *key)

{

    apikey = key;

}

 

String GetGoogleMap(double center_x, double center_y, int zoom, int cx, int cy,

                   const char *format, String *error)

{

    String request;

    request << "http://maps.google.com/maps/api/staticmap?center=" <<

               AsString(center_y) << ',' << AsString(center_x) <<

               "&zoom=" << zoom <<

               "&size=" << cx << 'x' << cy <<

               "&format=" << format <<

               "&sensor=false&key=" << apikey;

    return HttpClientGet(request, NULL, error);

}

 

Image GetGoogleMapImage(double center_x, double center_y, int zoom, int cx, int cy,

                       const char *format, String *error)

{

    return StreamRaster::LoadStringAny(GetGoogleMap(center_x, center_y, zoom, cx, cy, format, error));

}

 

double CvDeg(double deg, double minutes, double seconds)

{

    return deg + (double)minutes / 60 + seconds / 3600;

}

 

static void sFetch(double& a, double *x, int& ii)

{

    a = CvDeg(x[0], x[1], x[2]);

    ii = 0;

}

 

int CharFilterH(int c)

{

    return c == 'e' || c == 'E' ? 'r' : c == '\'' || c == '\"' ? '@' : c;

}

 

Pointf ScanGPS(const char *s)

{

    String h = Filter(s, CharFilterH);

    Pointf r = Null;

    double x[3];

    CParser p(h);

    x[0] = x[1] = x[2] = 0;

    int ii = 0;

    while(!p.IsEof()) {

        if(p.IsDouble()) {

            if(ii < 3)

                x[ii++] = p.ReadDouble();

            else {

                if(IsNull(r.y))

                    sFetch(r.y, x, ii);

                else {

                    sFetch(r.x, x, ii);

                    break;

                }

                x[ii++] = p.ReadDouble();

            }

        }

        else

        if(p.Char('W') || p.Char('w')) {

            if(x[0] > 0)

                x[0] = -x[0];

            sFetch(r.x, x, ii);

        }

        else

        if(p.Char('r'))

            sFetch(r.x, x, ii);

        else

        if(p.Char('S') || p.Char('s')) {

            if(x[0] > 0)

                x[0] = -x[0];

            sFetch(r.y, x, ii);

        }

        else

        if(p.Char('N') || p.Char('n'))

            sFetch(r.y, x, ii);

        else

            p.SkipTerm();

    }

    if(!IsNull(r.y) && IsNull(r.x))

        sFetch(r.x, x, ii);

    return r;

}

 

String FormatDegree(double d, int decimals)

{

    if(IsNull(d))

        return Null;

    d = modulo(d + 180, 360) - 180;

    char sign = (d < 0 ? '-' : '+');

    if(d < 0) d = -d;

    int deg = ffloor(d);

    String cd = ToCharset(CHARSET_DEFAULT, "%c%ERROR: Invalid UTF-8 sequence: "`,` CHARSET`_UTF8`)

This page is also in català, čeština, español, français, română, русский, 中文(简体) and 中文(繁體). Do you want to contribute?