itextsharp add annotation to existing pdf c# : Adding a link to a pdf in preview control application platform web page azure winforms web browser 14813-part1760

CHAPTER 6
You Are Here (And So Is Everybody Else)
Diving In
Geolocation is the art of figuring out where you are in the world and (optionally) sharing
that information with people you trust. There are many ways to figure out where you
are—your IP address, your wireless network connection, which cell tower your phone
is talking to, or dedicated GPS hardware that receives latitude and longitude informa-
tion from satellites in the sky.
Ask Professor Markup
Q: Geolocation sounds scary. Can I turn it off?
A: Privacy is an obvious concern when you’re talking about sharing your physical lo-
cation with a remote web server. The geolocation API explicitly states: “User Agents
must not send location information to websites without the express permission of the
user.” In other words, if you don’t want to share your location, you don’t have to.
The Geolocation API
The geolocation API lets you share your location with trusted websites. The latitude
and longitude are available to JavaScript on the page, which in turn can send that
information back to the remote web server and do fancy location-aware things like
finding local businesses or showing your location on a map.
As you can see from Table 6-1, the geolocation API is supported in several major
browsers on desktops and mobile devices. Additionally, some older browsers and de-
vices can be supported by wrapper libraries, as we’ll see later in this chapter.
117
Download from Library of Wow! eBook <www.wowebook.com>
Adding a link to a pdf in preview - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
add links to pdf file; add links to pdf
Adding a link to a pdf in preview - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
add hyperlink to pdf in preview; add hyperlink pdf
Table 6-1. Geolocation API support
IE
Firefox
Safari
Chrome
Opera
iPhone
Android
·
3.5+
5.0+
5.0+
·
3.0+
2.0+
Along with support for the standard geolocation API, there are a plethora of device-
specific APIs on other mobile platforms. I’ll cover all that later in this chapter.
Show Me the Code
The geolocation API centers around a new property on the global 
navigator
object:
navigator.geolocation
.
The simplest use of the geolocation API looks like this:
function get_location() {
navigator.geolocation.getCurrentPosition(show_map);
}
There’s no detection, no error handling, and no options. Your web application should
probably include at least the first two of those. To detect support for the geolocation
API (see “Geolocation” on page 24), you can use Modernizr:
function get_location() {
if (Modernizr.geolocation) {   
navigator.geolocation.getCurrentPosition(show_map);
} else {
// no native support; maybe try Gears?
}
}
What you do without geolocation support is up to you. I’ll explain the Gears fallback
option in a minute, but first I want to talk about what happens during that call to
getCurrentPosition()
. As I mentioned at the start of this chapter, geolocation support
is opt-in. That means your browser will never force you to reveal your current physical
location to a remote server. The user experience differs from browser to browser. In
Mozilla Firefox, calling the 
getCurrentPosition()
function of the geolocation API will
cause the browser to pop up an “infobar” at the top of the browser window. The infobar
looks like Figure 6-1.
Figure 6-1. Geolocation infobar
118 | Chapter 6: You Are Here (And So Is Everybody Else)
Download from Library of Wow! eBook <www.wowebook.com>
C# PDF insert image Library: insert images into PDF in C#.net, ASP
viewer component supports inserting image to PDF in preview without adobe this technical problem, we provide this C#.NET PDF image adding control, XDoc
active links in pdf; add a link to a pdf in preview
C# PDF Page Insert Library: insert pages into PDF file in C#.net
applications. Support adding and inserting one or multiple pages to existing PDF document. Forms. Ability to add PDF page number in preview. Offer
add link to pdf acrobat; adding hyperlinks to pdf
There’s a lot going on here. As the end user, you:
• Are told that a website wants to know your location
• Are told which website wants to know your location
• Can click through to Mozilla’s “Location-Aware Browsing” help page, which ex-
plains what the heck is going on
• Can choose to share your location
• Can choose not to share your location
• Can tell your browser to remember your choice (share or don’t share) so you never
see this infobar again on this website
Furthermore, this infobar is:
• Nonmodal, so it won’t prevent you from switching to another browser window or
tab
• Tab-specific, so it will disappear if you switch to another browser window or tab
and reappear when you switch back to the original tab
• Unconditional, so there is no way for a website to bypass it
• Blocking, so there is no chance that the website can determine your location while
it’s waiting for your answer
You just saw the JavaScript code that causes this infobar to appear. It’s a single function
call that takes a callback function (which I called 
show_map()
). The call to 
getCurrent
Position()
will return immediately, but that doesn’t mean that you have access to the
user’s location. The first time you are guaranteed to have location information is in the
callback function. The callback function looks like this:
function show_map(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// let's show a map or do something interesting!
}
The callback function will be called with a single parameter, an object with two prop-
erties: 
coords
and 
timestamp
. The timestamp is just that, the date and time when the
location was calculated. (Since this is all happening asynchronously, you can’t really
know when that will happen in advance. It might take some time for the user to read
the infobar and agree to share her location, devices with dedicated GPS hardware may
take some more time to connect to a GPS satellite, and so on.) The 
coords
object has
properties like 
latitude
and 
longitude
that represent exactly what they sound like: the
user’s physical location in the world. The 
position
object’s properties are listed in
Table 6-2.
Show Me the Code | 119
Download from Library of Wow! eBook <www.wowebook.com>
Download from Library of Wow! eBook 
<www.wowebook.com>
C# PDF insert text Library: insert text into PDF content in C#.net
Supports adding text to PDF in preview without adobe reader installed in ASP.NET. Powerful .NET PDF edit control allows modify existing scanned PDF text.
accessible links in pdf; clickable pdf links
VB.NET PDF insert text library: insert text into PDF content in vb
Multifunctional Visual Studio .NET PDF SDK library supports adding text content to adobe PDF document in VB.NET Add text to PDF in preview without adobe
pdf link to email; add email link to pdf
Table 6-2. Properties of the position object
Property
Type
Notes
coords.latitude
double
Decimal degrees
coords.longitude
double
Decimal degrees
coords.altitude
double
or 
null
Meters above the reference ellipsoid
coords.accuracy
double
Meters
coords.altitudeAccuracy
double
or 
null
Meters
coords.heading
double
or 
null
Degrees clockwise from true north
coords.speed
double
or 
null
Meters/second
timestamp
DOMTimeStamp
Like a 
Date()
object
Only  three  of  the  properties  are  guaranteed  to  be  there  (
coords.latitude
,
coords.longitude
, and 
coords.accuracy
). The rest might come back as 
null
, depending
on the capabilities of your device and the backend positioning server with which it
communicates. The 
heading
and 
speed
properties are calculated based on the user’s
previous position, if possible.
Handling Errors
Geolocation is complicated. So many things can go wrong. I’ve mentioned the “user
consent” angle already. If your web application wants the user’s location but the user
doesn’t want to give it to you, you’re screwed. The user always wins. But what does
that look like in code? It looks like the second argument to the 
getCurrentPosition()
function—an error handling callback function:
navigator.geolocation.getCurrentPosition(
show_map, handle_error)
If  anything  goes  wrong,  your  error  callback  function  will  be  called  with  a
PositionError
object. It has the properties listed in Table 6-3.
Table 6-3. Properties of the PositionError object
Property
Type
Notes
code
short
An enumerated value
message
DOMString
Not intended for end users
The 
code
property will be one of the following:
PERMISSION_DENIED
(
1
) if the user clicks the “Don’t Share” button or otherwise de-
nies you access to his location.
POSITION_UNAVAILABLE
(
2
) if the network is down or the positioning satellites can’t
be contacted.
120 | Chapter 6: You Are Here (And So Is Everybody Else)
Download from Library of Wow! eBook <www.wowebook.com>
C# Create PDF Library SDK to convert PDF from other file formats
Load PDF from stream programmatically. Preview PDF documents without other plug-ins. Besides, using this PDF document metadata adding control, you can
add url pdf; convert doc to pdf with hyperlinks
C# PowerPoint - How to Process PowerPoint
C# methods to add, insert or delete any specific PowerPoint slide, adding & burning & methods and sample codes of respective function, you may link the quick
add url link to pdf; pdf link
TIMEOUT
(
3
) if the network is up but it takes too long to calculate the user’s position.
How long is “too long”? I’ll show you how to define that in the next section.
UNKNOWN_ERROR
(
0
) if anything else goes wrong.
For example:
function handle_error(err) {
if (err.code == 1) {
// user said no!
}
}
Ask Professor Markup
Q: Does the geolocation API work on the International Space Station, on the moon, or
on other planets?
A: The geolocation specification states: “The geographic coordinate reference system
used by the attributes in this interface is the World Geodetic System (2d) [WGS84].
No other reference system is supported.” The International Space Station is orbiting
Earth, so astronauts on the station can describe their location by latitude, longitude,
and altitude. However, the World Geodetic System is Earth-centric, so it can’t be used
to describe locations on the moon or on other planets.
Choices! I Demand Choices!
Some popular mobile devices—like the iPhone and Android phones—support two
methods of figuring out where you are. The first method triangulates your position
based on your relative proximity to different cellular towers operated by your phone
carrier. This method is fast and doesn’t require any dedicated GPS hardware, but it
only gives you a rough idea of where you are. Depending on how many cell towers are
in your area, this “rough idea” could be accurate to as little as one city block or as much
as a kilometer in every direction.
The second method actually uses dedicated GPS hardware on your device to talk to
dedicated GPS positioning satellites that are orbiting the Earth. GPS can usually pin-
point your location to within a few meters. The downside is that the dedicated GPS
chip on your device draws a lot of power, so phones and other general-purpose mobile
devices usually turn off the chip until it’s needed. That means there will be a startup
delay while the chip initializes its connection with the GPS satellites in the sky. If you’ve
ever used Google Maps on an iPhone or other smartphone, you’ve seen both methods
in action. First you see a large circle that approximates your position (finding the nearest
cell tower), then a smaller circle (triangulating with other cell towers), then a single dot
with an exaction position (given by GPS satellites).
The reason I mention this is that, depending on your web application, you may not
need high accuracy. For example, if you’re looking for nearby movie listings, a “low-
Choices! I Demand Choices! | 121
Download from Library of Wow! eBook <www.wowebook.com>
VB.NET PDF insert image library: insert images into PDF in vb.net
in preview without adobe PDF control installed. Access to freeware download and online VB.NET class source code. This smart and mature PDF image adding component
pdf email link; change link in pdf file
VB.NET PDF copy, paste image library: copy, paste, cut PDF images
paste and cut PDF image while preview without adobe Free Visual Studio .NET PDF library, easy to Besides image extracting, adding, and removing, RasterEdge XDoc
clickable links in pdf from word; change link in pdf
accuracy” location is probably good enough. There aren’t that many movie theaters
around, even in dense cities, and you’ll probably be listing several of them anyway. On
the other hand, if you’re giving turn-by-turn directions in real time, you really do need
to know exactly where the user is so you can say “turn right in 20 meters” or whatever.
The 
getCurrentPosition()
function takes an optional third argument, 
PositionOp
tions
object. There are three properties you can set in a 
PositionOptions
object (see
Table 6-4). All the properties are optional; you can set any, all, or none of them.
Table 6-4. PositionOptions object properties
Property
Type
Default
Notes
enableHighAccuracy
boolean
false
true
might be slower
timeout
long
(no default) In milliseconds
maximumAge
long
0
In milliseconds
The 
enableHighAccuracy
property is exactly what it sounds like. If it’s set to 
true
, and
the device can support it, and the user consents to sharing her exact location, the device
will try to provide it. Both iPhones and Android phones have separate permissions
for low- and high-accuracy positioning, so it is possible that calling 
getCurrentPosi
tion()
with 
enableHighAccuracy:true
will fail, but calling it with 
enableHighAccur
acy:false
will succeed.
The 
timeout
property specifies the number of milliseconds your web application is
willing to wait for a position. This timer doesn’t start counting down until after the
user gives permission to even try to calculate her position. You’re not timing the user;
you’re timing the network.
The 
maximumAge
property allows the device to answer immediately with a cached posi-
tion. For example, let’s say you call 
getCurrentPosition()
for the very first time, the
user consents, and your success callback function is called with a position that was
calculated at exactly 10:00 AM. Then suppose that exactly one minute later, at 10:01
AM, you call 
getCurrentPosition()
again with a 
maximumAge
property of 
75000
:
navigator.geolocation.getCurrentPosition(
success_callback, error_callback, {maximumAge: 75000});
What you’re saying is that you don’t necessarily need the user’s current location. You
would be satisfied with knowing where he was 75 seconds (75000 milliseconds) ago.
In this case, the device knows where the user was 60 seconds (60000 milliseconds) ago,
because it calculated the location the first time you called 
getCurrentPosition()
. Since
this is within the specified window, the device doesn’t bother to recalculate the user’s
current location. It just returns exactly the same information it returned the first time:
the same latitude and longitude, accuracy, and timestamp (10:00 AM).
Before you ask for the user’s location, you should think about just how much accuracy
you need and set 
enableHighAccuracy
accordingly. If you will need to find the user’s
122 | Chapter 6: You Are Here (And So Is Everybody Else)
Download from Library of Wow! eBook <www.wowebook.com>
C# Word - Process Word Document in C#
Capable of adding and burning image on specific Word document page in C# class. You may click the link to go to each Word document processing tutorial page to
pdf hyperlink; chrome pdf from link
C# Excel - Excel Page Processing Overview
Support adding image of various formats (such as BMP, PNG & TIFF) to an Excel Click the link to specific C#.NET guide page and you will find detailed API(s
add link to pdf; add a link to a pdf file
location more than once, you should think about how old the information can be
and still be useful, and set 
maximumAge
accordingly. If you need to find the user’s location
continuously, 
getCurrentPosition()
is  not  for  you.  You  need  to  upgrade  to
watchPosition()
.
The 
watchPosition()
function has the same structure as 
getCurrentPosition()
. It takes
two callback functions—a required one for success and an optional one for error
conditions—and it can also take an optional 
PositionOptions
object that has all the
same properties you just learned about. The difference is that your callback function
will be called every time the user’s location changes. There is no need to actively poll the
position. The device will determine the optimal polling interval, and it will call your
callback function whenever it determines that the user’s position has changed. You can
use this to update a visible marker on a map, provide instructions on where to go next,
or whatever you like. It’s entirely up to you.
The 
watchPosition()
function itself returns a number. You should probably store this
number somewhere. If you ever want to stop watching the user’s location changes, you
can  call  the 
clearWatch()
method  and  pass  it  this  number, and the  device  will
stop  calling  your  callback  function.  If  you’ve  ever  used  the 
setInterval()
and
clearInterval()
functions in JavaScript, this works the same way.
What About IE?
Internet Explorer does not support the W3C geolocation API that I’ve just described
(see “The Geolocation API” on page 117). But don’t despair! Gears is an open source
browser plug-in from Google that works on Windows, Mac, Linux, Windows Mobile,
and Android platforms. It provides a number of features for older browsers, including
a geolocation API. It’s not quite the same as the W3C geolocation API, but it serves the
same purpose.
While we’re on the subject of legacy platforms, I should point out that there are a
number of device-specific geolocation APIs on mobile phone platforms. BlackBerry,
NokiaPalm, and OMTP BONDI all provide their own geolocation APIs. Of course,
they all work differently from Gears, which in turn works differently from the W3C
geolocation API. Wheeeeee!
geo.js to the Rescue
geo.js is an open source, MIT-licensed JavaScript library that smooths over the differ-
ences between the W3C geolocation API, the Gears API, and the various APIs provided
by mobile platforms. To use it, you’ll need to add two 
<script>
elements at the bottom
of your page. (Technically, you could put them anywhere, but putting scripts in your
<head>
will make your page load more slowly. So don’t do that!)
geo.js to the Rescue | 123
Download from Library of Wow! eBook <www.wowebook.com>
The first script is gears_init.js, which initializes Gears if it’s installed. The second script
is geo.js. You can include them in your page using code like this:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dive Into HTML 5</title>
</head>
<body>
...
<script src="gears_init.js"></script>   
<script src="geo.js"></script>
</body>
</html>
Now you’re ready to use whichever geolocation API is installed:
if (geo_position_js.init()) {
geo_position_js.getCurrentPosition(geo_success, geo_error);
}
Let’s take that one step at a time. First, you need to explicitly call an 
init()
function.
The 
init()
function returns 
true
if a supported geolocation API is available:
if (geo_position_js.init()) {
Calling the 
init()
function does not actually find the user’s location; it just verifies that
finding the location is possible. To actually find the user’s location, you need to call
the 
getCurrentPosition()
function:
geo_position_js.getCurrentPosition(geo_success, geo_error);
The 
getCurrentPosition()
function will trigger the browser to ask for permission to
find and share the user’s location. If geolocation is being provided by Gears, this will
pop up a dialog asking if the user trusts the website to use Gears. If the browser natively
supports the geolocation API, the dialog will look different. For example, Firefox 3.5
will display an infobar at the top of the page asking whether the user wants to share
her location with your website.
The 
getCurrentPosition()
function takes two callback functions as arguments. If the
getCurrentPosition()
function was successful in finding the location—that is, if the
user gave permission and the geolocation API actually worked its magic—it will call
the function passed in as the first argument. In this example, the success callback func-
tion is called 
geo_success
:
geo_position_js.getCurrentPosition(geo_success, geo_error);
The success callback function takes a single argument, which contains the position
information:
function geo_success(p) {
alert("Found you at latitude " + p.coords.latitude +
", longitude " + p.coords.longitude);
}
124 | Chapter 6: You Are Here (And So Is Everybody Else)
Download from Library of Wow! eBook <www.wowebook.com>
If the 
getCurrentPosition()
function could not find the user’s location—either because
he declined to give permission or because the geolocation API failed for some reason—
it will call the function passed in as the second argument. In this example, the failure
callback function is called 
geo_error
:
geo_position_js.getCurrentPosition(geo_success, geo_error);
The failure callback function takes no arguments:
function geo_error() {
alert("Could not find you!");
}
geo.js does not currently support the 
watchPosition()
function. If you need continuous
location information, you’ll need to actively poll 
getCurrentPosition()
yourself.
A Complete Example
Let’s work through an example of using geo.js to attempt to get the user’s location and
display a map of the immediate surroundings.
When the page loads, it will need to call 
geo_position_js.init()
to determine whether
geolocation is available through any of the interfaces that geo.js supports. If so, you can
set up a link the user can click to look up her location. Clicking that link calls the
lookup_location()
function, shown here:
function lookup_location() {
geo_position_js.getCurrentPosition(show_map, show_map_error);
}
If the user gives consent to track her location, and the backend service was actually able
to determine that location, geo.js calls the first callback function, 
show_map()
, with a
single argument, 
loc
. The 
loc
object has a 
coords
property that contains latitude, lon-
gitude, and accuracy information. (This example doesn’t use the accuracy informa-
tion.) The rest of the 
show_map()
function uses the Google Maps API to set up an
embedded map:
function show_map(loc) {
$("#geo-wrapper").css({'width':'320px','height':'350px'});
var map = new GMap2(document.getElementById("geo-wrapper"));
var center = new GLatLng(loc.coords.latitude, loc.coords.longitude);
map.setCenter(center, 14);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.addOverlay(new GMarker(center, {draggable: false, title: "You are here (more or
less)"}));
}
If geo.js is unable to determine the location, it calls the second callback function,
show_map_error()
:
A Complete Example | 125
Download from Library of Wow! eBook <www.wowebook.com>
function show_map_error() {
$("#live-geolocation").html('Unable to determine your location.');
}
Further Reading
• W3C geolocation API
• Gears
• BlackBerry geolocation API
• Nokia geolocation API
• Palm geolocation API
• OMTP BONDI geolocation API
• geo.js, the geolocation API wrapper script
126 | Chapter 6: You Are Here (And So Is Everybody Else)
Download from Library of Wow! eBook <www.wowebook.com>
Documents you may be interested
Documents you may be interested