`
`Eee tee
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover
`
`CSURUCACORALS anne4 a
`Build an interactive vacation map and include your photos MPanri Wr
`BEANN Ne UB: Build a spacestation tracker
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover
`
`
`
`Hacking Google® Maps
`and Google® Earth
`
`Martin C. Brown
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-1
`
`
`
`Hacking Google® Maps
`and Google® Earth
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-2
`
`
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-3
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-3
`
`
`
`Hacking Google® Maps
`and Google® Earth
`
`Martin C. Brown
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-4
`
`
`
`Hacking Google® Maps and Google® Earth
`
`Published by
`Wiley Publishing, Inc.
`10475 Crosspoint Boulevard
`Indianapolis, IN 46256
`www.wiley.com
`Copyright ©
`Published simultaneously in Canada
`
`2006 by Wiley Publishing, Inc., Indianapolis, Indiana
`
`ISBN-13: 978-0-471-79009-9
`ISBN-10: 0-471-79009-5
`
`Manufactured in the United States of America
`
`10 9 8 7 6 5 4 3 2 1
`
`1B/QV/QX/QW/IN
`
`No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic,
`mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States
`Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy
`fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the
`Publisher for permission should be addressed to the Legal Department, Wiley Publishing, Inc., 10475 Crosspoint Blvd., Indianapolis, IN
`46256, (317) 572-3447, fax (317) 572-4355, or online at http://www.wiley.com/go/permissions.
`
`LIMIT OF LIABILITY/DISCLAIMER OF WARRANTY: THE PUBLISHER AND THE AUTHOR MAKE NO
`REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE ACCURACY OR COMPLETENESS OF THE
`CONTENTS OF THIS WORK AND SPECIFICALLY DISCLAIM ALL WARRANTIES, INCLUDING WITHOUT
`LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE. NO WARRANTY MAY BE CREATED OR
`EXTENDED BY SALES OR PROMOTIONAL MATERIALS. THE ADVICE AND STRATEGIES CONTAINED HEREIN
`MAY NOT BE SUITABLE FOR EVERY SITUATION. THIS WORK IS SOLD WITH THE UNDERSTANDING THAT THE
`PUBLISHER IS NOT ENGAGED IN RENDERING LEGAL, ACCOUNTING, OR OTHER PROFESSIONAL SERVICES. IF
`PROFESSIONAL ASSISTANCE IS REQUIRED, THE SERVICES OF A COMPETENT PROFESSIONAL PERSON
`SHOULD BE SOUGHT. NEITHER THE PUBLISHER NOR THE AUTHOR SHALL BE LIABLE FOR DAMAGES
`ARISING HEREFROM. THE FACT THAT AN ORGANIZATION OR WEBSITE IS REFERRED TO IN THIS WORK AS A
`CITATION AND/OR A POTENTIAL SOURCE OF FURTHER INFORMATION DOES NOT MEAN THAT THE
`AUTHOR OR THE PUBLISHER ENDORSES THE INFORMATION THE ORGANIZATION OR WEBSITE MAY
`PROVIDE OR RECOMMENDATIONS IT MAY MAKE. FURTHER, READERS SHOULD BE AWARE THAT INTERNET
`WEBSITES LISTED IN THIS WORK MAY HAVE CHANGED OR DISAPPEARED BETWEEN WHEN THIS WORK
`WAS WRITTEN AND WHEN IT IS READ.
`
`For general information on our other products and services or to obtain technical support, please contact our Customer Care Department
`within the U.S. at (800) 762-2974, outside the U.S. at (317) 572-3993 or fax (317) 572-4002.
`
`Library of Congress Cataloging-in-Publication Data
`Brown, Martin C.
`Hacking Google Maps and Google Earth / Martin C. Brown.
`p. cm.
`Includes index.
`ISBN-13: 978-0-471-79009-9 (paper/website)
`ISBN-10: 0-471-79009-5 (paper/website)
`1. Geographic information systems. 2. Google Maps. 3. Google Earth. I. Title.
`G70.212.B765 2006
`910.285--dc22
`
`2006013971
`
`Trademarks: Wiley, the Wiley logo, and related trade dress are trademarks or registered trademarks of John Wiley & Son, Inc. and/or its
`affiliates, in the United States and other countries, and may not be used without written permission. ExtremeTech and the ExtremeTech
`logo are trademarks of Ziff Davis Publishing Holdings, Inc. Used under license. All rights reserved. Google is a registered trademark of
`Google, Inc. All other trademarks are the property of their respective owners. Wiley Publishing, Inc., is not associated with any product or
`vendor mentioned in this book.
`
`Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books.
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-5
`
`
`
`To Darcy and Leon, the cats that understand everything and nothing, respectively.
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-6
`
`
`
`About the Author
`A professional writer for more than six years, Martin C. Brown (MC) is the author of both the
`Perl and Python Annotated Archives and Complete Reference books (all four Osborne/McGraw-
`Hill), Microsoft IIS 6 Delta Guide (Sams Publishing), and 14 other published computing titles.
`His expertise spans myriad development languages and platforms—Perl, Python, Java,
`JavaScript, Basic, Pascal, Modula-2, C, C++, Rebol, Gawk, Shellscript, Windows, Solaris,
`Linux, BeOS, Microsoft WP, Mac OS, and more—as well as web programming, systems
`management, and integration. MC is a regular contributor to ServerWatch.com and IBM
`developerWorks.
`He is also a regular writer of white papers and how-to guides for Microsoft on subjects such as
`migrating Solaris/Unix/Linux development and systems administration to Windows 2000 and
`2003 Server product lines. He draws on a rich and varied background as a founding member of
`a leading U.K. ISP, systems manager and IT consultant for an advertising agency and Internet
`solutions group, technical specialist for an intercontinental ISP network, and database designer
`and programmer—and as a self-confessed compulsive consumer of computing hardware and
`software. In his formative pre-writing life, he spent 10 years designing and managing mixed
`platform environments. As a result he has developed a rare talent of being able to convey the
`benefits and intricacies of his subject with equal measures of enthusiasm, professionalism, in-
`depth knowledge, and insight. MC is currently a member of the MySQL Documentation
`Team.
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-7
`
`
`
`Project Coordinator
`Ryan Steffen
`
`Graphics and Production Specialists
`Jennifer Click
`Denny Hager
`Stephanie Jumper
`
`Quality Control Technician
`John Greenough
`
`Proofreading and Indexing
`Techbooks
`
`Cover Design
`Anthony Bunyan
`
`Credits
`Executive Editor
`Chris Webb
`
`Development Editors
`Kelly Talbot
`Suzanna R. Thompson
`
`Technical Editor
`Ben Hammersley
`
`Production Editor
`Pamela Hanley
`
`Copy Editor
`Kim Cofer
`
`Editorial Manager
`Mary Beth Wakefield
`
`Production Manager
`Tim Tate
`
`Vice President and Executive Group
`Publisher
`Richard Swadley
`
`Vice President and Executive Publisher
`Joseph B. Wikert
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-8
`
`
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-9
`
`Petitioner Apple Inc. - Ex. 1053, p. Cover-9
`
`
`
`Contents at a Glance
`
`Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
`Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
`
`Part I: Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
`Chapter 1: Using Geographical Information . . . . . . . . . . . . . . . . . . . . . . . . . 3
`Chapter 2: The Google Local Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
`Chapter 3: The Google Maps API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
`Chapter 4: The Google Web API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
`Chapter 5: Storing and Sharing Information . . . . . . . . . . . . . . . . . . . . . . . . 65
`
`Part II: Instant Gratification . . . . . . . . . . . . . . . . . . . . . . . . . 93
`Chapter 6: Working with Existing Address Information . . . . . . . . . . . . . . . . . . 95
`Chapter 7: Extending the Google API Examples . . . . . . . . . . . . . . . . . . . . . 103
`Chapter 8: Discovering Overlays and Mash-ups . . . . . . . . . . . . . . . . . . . . . . 133
`
`Part III: Google Maps Hacks . . . . . . . . . . . . . . . . . . . . . . . . 143
`Chapter 9: Using Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
`Chapter 10: Overlaying Statistical Data . . . . . . . . . . . . . . . . . . . . . . . . . . 181
`Chapter 11: Building a Community Site . . . . . . . . . . . . . . . . . . . . . . . . . . 207
`Chapter 12: The Realtors and Archaeologists Toolkit . . . . . . . . . . . . . . . . . . . 227
`Chapter 13: I Need to Get To.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
`Chapter 14: Merging with Flickr Photos . . . . . . . . . . . . . . . . . . . . . . . . . . 279
`
`Part IV: Google Earth Hacks. . . . . . . . . . . . . . . . . . . . . . . . . 291
`Chapter 15: Introducing Google Earth . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
`Chapter 16: Generating Google Earth Feeds . . . . . . . . . . . . . . . . . . . . . . . . 309
`Chapter 17: History and Planning with Google Earth . . . . . . . . . . . . . . . . . . . 327
`Appendix: Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
`
`Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
`
`Petitioner Apple Inc. - Ex. 1053, p. ix
`
`
`
`Petitioner Apple Inc. - Ex. 1053, p. x
`
`Petitioner Apple Inc. - Ex. 1053, p. x
`
`
`
`Contents
`
`Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
`Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
`
`Part I: Basics
`
`1
`
`Chapter 1: Using Geographical Information . . . . . . . . . . . . . . . . . 3
`Understanding Your Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
`Mapping a Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
`Defining a Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
`Moving to Another Location . . . . . . . . . . . . . . . . . . . . . . . . . . 6
`Thinking in Terms of Geographical Location . . . . . . . . . . . . . . . . . . . . . 6
`To Find Places . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
`To Identify Photo Subjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
`To Understand Statistical Data. . . . . . . . . . . . . . . . . . . . . . . . . . 9
`To Generate Data from Maps
`. . . . . . . . . . . . . . . . . . . . . . . . . 10
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
`
`Chapter 2: The Google Local Interface . . . . . . . . . . . . . . . . . . . 13
`System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
`Examining the Main Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
`Interacting with the Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
`Moving the Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
`Zooming In and Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
`Changing the View Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
`Conducting Searches
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
`Understanding Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
`Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
`Pop-ups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
`Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
`Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
`
`Chapter 3: The Google Maps API . . . . . . . . . . . . . . . . . . . . . . 35
`Using the API Key. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
`Browser Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
`Basic Components of a Google Maps Application . . . . . . . . . . . . . . . . . . 37
`XHTML (Extensible HTML) . . . . . . . . . . . . . . . . . . . . . . . . . 37
`VML (Vector Markup Language) . . . . . . . . . . . . . . . . . . . . . . . 38
`Styles and Elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
`
`Petitioner Apple Inc. - Ex. 1053, p. xi
`
`
`
`xii
`
`Contents
`
`XML (Extensible Markup Language) . . . . . . . . . . . . . . . . . . . . . 39
`JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
`Understanding API Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
`Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
`Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
`Information Windows
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
`Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
`The Google Maps Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
`GMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
`GMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
`GPolyline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
`GIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
`GEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
`GXmlHttp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
`GXml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
`GXslt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
`GPoint
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
`GSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
`GBounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
`
`Chapter 4: The Google Web API . . . . . . . . . . . . . . . . . . . . . . . 53
`Downloading the Google Web API . . . . . . . . . . . . . . . . . . . . . . . . . . 53
`Using the Google Web API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
`Conducting Searches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
`Comparing Language Samples . . . . . . . . . . . . . . . . . . . . . . . . . 60
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
`
`Chapter 5: Storing and Sharing Information. . . . . . . . . . . . . . . . . 65
`Format Types and Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
`Using Flat-Text Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
`Using XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
`Using an RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
`Parsing and Generating Text Files. . . . . . . . . . . . . . . . . . . . . . . . . . . 67
`Reading Delimited Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
`Writing Delimited Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
`Reading Fixed-Width Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
`Writing Fixed-Width Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
`Updating Text Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
`Generating and Parsing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
`Generating XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
`Parsing XML with Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
`Parsing XML with JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . 79
`Working with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
`Creating a Database Structure . . . . . . . . . . . . . . . . . . . . . . . . . 83
`Interfacing to the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
`Populating the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
`Extracting Data from the Database . . . . . . . . . . . . . . . . . . . . . . . 89
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
`
`Petitioner Apple Inc. - Ex. 1053, p. xii
`
`
`
`Contents
`
`xiii
`
`Part II: Instant Gratification
`
`93
`
`Chapter 6: Working with Existing Address Information . . . . . . . . . . 95
`Looking Up Geocode Information . . . . . . . . . . . . . . . . . . . . . . . . . . 95
`Looking Up U.S. Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
`Looking Up Global Information . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
`
`Chapter 7: Extending the Google API Examples . . . . . . . . . . . . . . 103
`Installing a Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
`Adding Controls to the Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
`Moving about a Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
`Adding Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
`Adding a Single Marker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
`Adding Multiple Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
`Adding Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
`Opening an Info Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
`Event Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
`Monitoring Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
`Adding Markers to Multiple Maps . . . . . . . . . . . . . . . . . . . . . . 125
`Monitoring Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
`
`Chapter 8: Discovering Overlays and Mash-ups . . . . . . . . . . . . . 133
`Traffic Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
`Toronto Transit Commission (TTC) Map . . . . . . . . . . . . . . . . . . 133
`Toronto Traffic Cameras. . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
`U.K. Speed Cameras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
`Trackers and Locators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
`Hurricanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
`Satellites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
`Blackbirds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
`
`Part III: Google Maps Hacks
`
`143
`
`Chapter 9: Using Overlays . . . . . . . . . . . . . . . . . . . . . . . . . 145
`Building in Multiple Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
`Extending the Source HTML. . . . . . . . . . . . . . . . . . . . . . . . . 145
`Making the Generation Dynamic with a Script. . . . . . . . . . . . . . . . 148
`Pulling the Data from a Database . . . . . . . . . . . . . . . . . . . . . . . . . . 157
`Creating a Suitable Database Structure . . . . . . . . . . . . . . . . . . . . 157
`Generating XML from that Information . . . . . . . . . . . . . . . . . . . 159
`Extending the Information Pane . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
`Formatting Information Panes. . . . . . . . . . . . . . . . . . . . . . . . . 161
`Creating More Detailed Windows from XML and XSLT . . . . . . . . . . 163
`
`Petitioner Apple Inc. - Ex. 1053, p. xiii
`
`
`
`xiv
`
`Contents
`
`Making Your Example Truly Dynamic. . . . . . . . . . . . . . . . . . . . . . . . 167
`Dividing the Application into Components. . . . . . . . . . . . . . . . . . 168
`The JavaScript Component . . . . . . . . . . . . . . . . . . . . . . . . . . 169
`Generating the XML on the Backend. . . . . . . . . . . . . . . . . . . . . 174
`Using the New Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
`Extending the Content
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
`
`Chapter 10: Overlaying Statistical Data . . . . . . . . . . . . . . . . . . 181
`Generating/Obtaining Statistical Information . . . . . . . . . . . . . . . . . . . . 181
`The U.S. Census Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
`Converting the Source Data to XML . . . . . . . . . . . . . . . . . . . . . 182
`Using Polylines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
`Basic Point Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
`Building an Internal Data Representation. . . . . . . . . . . . . . . . . . . 188
`Adding a Bar Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
`Adding a Circle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
`Plotting Multiple Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . 194
`Using Custom Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
`Building Your Own Icon . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
`Putting the Icon on a Map . . . . . . . . . . . . . . . . . . . . . . . . . . 202
`Using Icon Size to Represent Data . . . . . . . . . . . . . . . . . . . . . . 203
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
`
`Chapter 11: Building a Community Site . . . . . . . . . . . . . . . . . . 207
`Displaying Highlighted Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
`Adding More Data to the Output . . . . . . . . . . . . . . . . . . . . . . . . . . 208
`Storing and Creating the Data . . . . . . . . . . . . . . . . . . . . . . . . 209
`Backend Database Interface . . . . . . . . . . . . . . . . . . . . . . . . . . 211
`Using Custom Icons to Highlight Different Attractions
`. . . . . . . . . . . . . . 213
`Filtering Data through Layers of Information . . . . . . . . . . . . . . . . . . . . 215
`HTML Preamble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
`Global Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
`Entity Object
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
`Initial Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
`Loading a List of Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
`Moving the Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
`Removing Existing Markers . . . . . . . . . . . . . . . . . . . . . . . . . . 218
`Adding Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
`Loading Markers for a Type . . . . . . . . . . . . . . . . . . . . . . . . . . 219
`Recentering the Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
`Closing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
`Final Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
`
`Petitioner Apple Inc. - Ex. 1053, p. xiv
`
`
`
`Contents
`
`xv
`
`Chapter 12: The Realtors and Archaeologists Toolkit . . . . . . . . . . . 227
`Alternative Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
`The TLabel Extension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
`Building a TLabel Application . . . . . . . . . . . . . . . . . . . . . . . . 232
`Overlaying Images and Drawings . . . . . . . . . . . . . . . . . . . . . . . . . . 239
`The TPhoto Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
`Using TPhoto Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
`Identifying Elements from Click Locations . . . . . . . . . . . . . . . . . . . . . 244
`Creating a Unique Map Object . . . . . . . . . . . . . . . . . . . . . . . . 244
`Registering the Objects on the Map. . . . . . . . . . . . . . . . . . . . . . 245
`Identifying the Click Location . . . . . . . . . . . . . . . . . . . . . . . . 246
`Resetting the Map Location. . . . . . . . . . . . . . . . . . . . . . . . . . 246
`Resetting the Object Opacity . . . . . . . . . . . . . . . . . . . . . . . . . 247
`Final Overlay Application . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
`
`Chapter 13: I Need to Get To... . . . . . . . . . . . . . . . . . . . . . . . 251
`Front-End Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
`HTML Wrapper
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
`Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
`Enabling the Route Recording Process . . . . . . . . . . . . . . . . . . . . 254
`Disabling the Route Recording Process . . . . . . . . . . . . . . . . . . . . 255
`Clearing the Last Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
`Clearing the Current Route . . . . . . . . . . . . . . . . . . . . . . . . . . 256
`Initializing a New Route. . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
`Deleting a Route. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
`Saving a Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
`Loading a List of Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
`Loading a Single Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
`Adding Markers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
`Initializing the Application . . . . . . . . . . . . . . . . . . . . . . . . . . 264
`Recentering and Zooming the Map . . . . . . . . . . . . . . . . . . . . . . 265
`Backend Database Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
`Database Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
`Basic Wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
`Message Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
`Listing Existing Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
`Saving a Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
`Deleting an Existing Route . . . . . . . . . . . . . . . . . . . . . . . . . . 269
`Obtaining a Single Route . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
`Calculating Distance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
`Using the Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
`
`Petitioner Apple Inc. - Ex. 1053, p. xv
`
`
`
`xvi
`
`Contents
`
`Chapter 14: Merging with Flickr Photos . . . . . . . . . . . . . . . . . . 279
`Flickr and the Flickr API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
`The Flickr API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
`Getting a Flickr API Key . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
`Adding Geographic Data to Your Flickr Photos . . . . . . . . . . . . . . . 280
`Adding Flickr Photos to a Google Map . . . . . . . . . . . . . . . . . . . . . . . 281
`A Flickr Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
`Searching Flickr for Photos . . . . . . . . . . . . . . . . . . . . . . . . . . 282
`Getting Individual Photo Data . . . . . . . . . . . . . . . . . . . . . . . . 284
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
`
`Part IV: Google Earth Hacks
`
`291
`
`Chapter 15: Introducing Google Earth . . . . . . . . . . . . . . . . . . . 293
`Google Earth Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
`Obtaining the Application. . . . . . . . . . . . . . . . . . . . . . . . . . . 294
`Google Earth Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
`Extending Google Earth Information . . . . . . . . . . . . . . . . . . . . . . . . 304
`Exporting Your Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
`Basic KML Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
`
`Chapter 16: Generating Google Earth Feeds. . . . . . . . . . . . . . . . 309
`Showing Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
`Generating KML from Existing Data. . . . . . . . . . . . . . . . . . . . . 310
`Generating KML Dynamically . . . . . . . . . . . . . . . . . . . . . . . . 315
`Adding Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
`
`Chapter 17: History and Planning with Google Earth . . . . . . . . . . . 327
`Location Photos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
`Using a Photo for a Placemark . . . . . . . . . . . . . . . . . . . . . . . . 327
`Scaling the Icon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
`Setting a View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
`Adding Detail to a Placemark . . . . . . . . . . . . . . . . . . . . . . . . . 331
`Final KML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
`Generating the Information in Google Earth . . . . . . . . . . . . . . . . . 334
`Generating a KMZ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
`Revisiting the Realtor’s Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
`Using an Overlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
`Creating a 3D Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
`Wrapping Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
`
`Petitioner Apple Inc. - Ex. 1053, p. xvi
`
`
`
`Contents
`
`xvii
`
`Appendix: Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
`Google Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
`Google Maps API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
`Google Maps API Documentation . . . . . . . . . . . . . . . . . . . . . . 346
`Google Maps API Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
`Google Web API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
`Google Maps Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
`Information Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`Google Maps Mania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`Maplandia.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`Google Maps on Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`Google Sightseeing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`Geocoders
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
`MGeocoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`Geocode America . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`Geocoder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`Google Maps Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`gMap it! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`Mobile GMaps
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`MapBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
`MapKi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`Competitors and Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`MapQuest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`Virtual Earth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`Yahoo! Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`A9 Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
`Multimap.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
`Map24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
`
`Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
`
`Petitioner Apple Inc. - Ex. 1053, p. xvii
`
`
`
`Petitioner Apple Inc. - Ex. 1053, p. xvii
`
`
`
`
`
`Petitioner Apple Inc. - Ex. 1053, p. xviii
`
`
`
`Acknowledgments
`I’d like to thank