Hi Rod,
The app I wanted to develop was to have GPS and mapping as its beginning
basic features. Later you'll see I began interfacing it with Google Maps
and Google+ Places because it gave blind users a much easier interface,
and
because all of these Google features have GPS locations as part of their
functions or supplied data.
The app creates 2 databases: one for your points of interest (a GPS
location
with a name and a category to describe what type of place it is), an
address, set of comments, and an indication if its sharable with others.
The other database is for your "reminders". The reminders are
location-based, and linked to the POI table: that is, they can do various
things for you if you have a laptop or ultrabook or netbook with a GPS
receiver. The app constantly compares your current position against any
reminders you've created which are linked to POI locations. If you come
within a specified distance, travel time, etc. from a POI location tied to
a
reminder, the app will do something.
If the reminder is your bus stop for instance, whenever you come within 1
minute of travel (at your current speed) it could speak something, sound a
tone, and do this just once or until you press something to quiet it. You
can also create reminders which occur only once: such as if you get near
Radio Shack, a reminder could tell you to pick up new headphones.
Cool enough, but I wanted to do more, so I looked at Google. I found for
instance, instead of having a user go to a place to get its GPS location
in
order to create a POI for that place, Google provides a service where you
can enter an address and it will give you the approximate GPS location for
that address (called reverse geocoding). I added this to the dialog for
creating a POI, and now you no longer need to be at a place in order to
add
it as a point.
Google goes much further though: I can give it the address you entered,
and
get from it a list of places (in increasing distance) of all businesses
and
other types of locations that Google knows about. Not only can you start
with an address, but you can specify part of the name; keywords for the
types of locations you want to see, and other search criteria. And so, if
you wanted to add an ATM as one of your points, which you know was
somewhere
near the grocery store, you could enter the address of the grocery store
in
the dialog to add a point, click on the command button to get near-by
locations from Google, and enter ATM as a keyword. The returned list of
locations from Google will be ATMs, in increasing distance from the
address
you started with. Not only will the list show you the name and address of
each ATM, but since it gives me its GPS location, and I have the GPS
location of the address we started with, I can tell you for each list
entry
its relative location to you (such as 500 feet north, or 2 miles
southwest),
thus helping you find the one you wanted to add. You select it and it's
added as a point in your database. One last nice feature: we don't have
to
start by you knowing an address; you can pick any point in your database
to
start with, and Google can use its GPS location as the starting point for
your search; so you can find almost anything by just knowing something
about
what it's near to.
Even though I keep saying Google; all of this is done over the internet
(using XML) and with the user in an app's XML dialog, so no need to
negotiate a difficult web interface.
I looked further at what Google can do, and one of the pieces of info it
gives back to me for any place is an http address for a "Google Place" web
page, so I add this to the point database, and give you a command button
to
click on to go to this page. This page will tell you what kind of place
this is, what type of business, show you any reviews or comments from
others, and even show you the hours of operation. It also will show you
any
"events" which have been entered into Google for this location (such as a
sale or a party? This isn't clear).
Google also gives me the official web page of this location, and so I
store
it in the database, and provide a button for going to its "official" web
site.
I now added an app menu which allows you to bring up a list of all the
points in your database, sort and filter them as you like, and then go
into
any of them to use them to see what's near-by, go to its Google Places
page,
etc. It will also tell you where a given point (or one associated with a
reminder which was just triggered for you) is, relative to your current
location (such as the bus stop being 500 feet to your north).
The next feature I found from Google is that it will give you directions
from one place to another; and you can specify whether you want driving
directions, walking directions, or directions which make use of public
transit. I added this as an app menu choice, and I allow you for both the
"from" and the "to" location, to use a point from your database, an
address,
or your current GPS location. When you have specified your "from" and
"to"
locations, you can click on the type of directions that you want, and they
will appear in an editbox on this dialog; no need again for a difficult
web
page interface. I expect the directions to be popular (even though not
all
cities have the public transit option available).
Right now I'm adding the ability to import a GPX file of points (a kind of
universal format for exchanging points), and the ability to export one
from
your points as well.
You can see (I hope) though that I've got a lot of features, but not
necessarily a cohesive structure designed to hang them all on. I'd like
to
be able for all blind users to easily share points among themselves (the
way
users of the barcode scanning application from the A.T. Guys share barcode
data), but I'm not sure what else it should do. Is this too much already?
It looks like Google has further features (such as the ability for a user
to
add a Google Place if it doesn't have one, or for users to add "events" to
a
Google Place), and to search for places when you don't know anything about
where it is (and so you can just type in "indian food in Tallahassee
Florida").
It needs another app I wrote named GPS, which is a shared object library,
and so it looks to see if you've installed this app, and if you haven't it
offers to automatically download and install it for you.
Also, it makes use of a feature from Windows 7 and Windows 8 called the
"Location Sensor API". This reports your position to programs, even if
you
don't have a GPS receiver connected. It can often get this from your ISP
or
the wifi hotspot you're connected to. Newer GPS receivers also come with
drivers which report your position to the Windows Location Sensor. This
app
however will work on any version of Windows, and you can buy a GPS
receiver
for around $50 or $75 (I've got a rechargeable Bluetooth one) which can
figure out your position in 30 seconds or so. The app keeps you informed
of
how your GPS receiver is doing (whether it has a position, etc.) with
various sound effects.
Here is where I am at the moment, and hopefully opinions of others will
help
shape the app. I'd like for it to be useful enough to be a selling point
for WE owners (to help users consider switching screen readers). Maybe it
can be an example to other scripters of how to interface with web sites
via
XML, or maybe it should be encrypted to keep others from copying it for
other screen readers (I'm not sure about this)? I really want it to be
available to other scripters.
Even the name is up for discussion.
Obviously anyone who wants to try it should realize it's not even beta
software yet.
Chip
[email protected]