<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6774903665752106951</id><updated>2011-09-21T22:42:51.166-04:00</updated><title type='text'>Oracle MapViewer</title><subtitle type='html'>All things Oracle MapViewer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-5836340718339674957</id><published>2011-09-21T22:04:00.004-04:00</published><updated>2011-09-21T22:42:51.477-04:00</updated><title type='text'>Finding sales offices within a certain distance of a customer</title><content type='html'>In this post lets do a simple demo that shows all the customers (from the MVDEMO's customers table) on the map. Now, when you click on a customer marker, I want to display all the cities that are within 50 miles radius of the customer.    I mentioned sales office in the title to make it sound more interesting, but our small MVDEMO sample data set does not have such a table, so we will use the readily available cities table instead.&lt;br /&gt;&lt;br /&gt;Basically, we want to run a query like following when you click on any given customer marker:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;select city, state_abrv, location from cities&lt;br /&gt;where sdo_within_distance(location,&lt;br /&gt;           sdo_geometry(2001, 8307, sdo_point_type(:1, :2, null), null, null),&lt;br /&gt;:3)='TRUE';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And display the query result as a new theme on the map.  Note the three binding parameters in the above query. The first two should be the longitude and latitude of the customer location. The 3rd parameter is a Oracle Spatial WITHIN_DISTANCE operator parameter, typically in the form of 'distance=50 unit=mile'. So a properly bound query looks like this (you can execute it in the mvdemo schema).&lt;br /&gt;&lt;br /&gt;select city, state_abrv, location from cities&lt;br /&gt; where sdo_within_distance(location, &lt;br /&gt;            sdo_geometry(2001, 8307, sdo_point_type(-122, 37.5, null), null, null), &lt;br /&gt;'distance=50 unit=mile')='TRUE';&lt;br /&gt;&lt;br /&gt;We could use a dynamic-query based theme to display the above query result. But, ever mindful of safety and efficiency, we will instead create a pre-defined theme in the mvdemo schema. The trick is to add a query condition that contains these binding variables and disable the default (window-based) spatial filter for the new theme. Below is a screenshot of such a theme (cities_near_customer) and its query condition:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-i5mAWtVFruc/TnqafrKBrWI/AAAAAAAAAIQ/zNDuGC4NT80/s1600/nearest.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 224px;" src="http://4.bp.blogspot.com/-i5mAWtVFruc/TnqafrKBrWI/AAAAAAAAAIQ/zNDuGC4NT80/s320/nearest.png" alt="" id="BLOGGER_PHOTO_ID_5655002151068478818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we have the theme defined, we can work on the actual demo itself. The demo page source is found below. Just copy and paste it into an html file, save it in your web server where MapViewer is deployed, and you are all set (assuming the usual mvdemo datasource exists in the MapViewer instance).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head&gt;&lt;br /&gt;&amp;lt;META http-equiv="Content-Type" content="text/html" charset=UTF-8"&gt;&lt;br /&gt;&amp;lt;TITLE&gt;Map Cache Server/Map Client&amp;lt;/TITLE&gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="../t.css" /&gt;&lt;br /&gt;&amp;lt;script language="Javascript" src="/mapviewer/fsmc/jslib/oraclemaps.js"&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language=javascript&gt;&lt;br /&gt;  var mapview;&lt;br /&gt;  var nearestCitiesTheme;&lt;br /&gt;  &lt;br /&gt;  function showMap() &lt;br /&gt;  { &lt;br /&gt;    var baseURL  = "http://"+document.location.host+"/mapviewer";&lt;br /&gt;    var mapCenterLon = -122.45;&lt;br /&gt;    var mapCenterLat =  37.7706;&lt;br /&gt;    var mapZoom      =  3;       &lt;br /&gt;    var mpoint = MVSdoGeometry.createPoint(mapCenterLon,mapCenterLat,8307);&lt;br /&gt;    mapview = new MVMapView(document.getElementById("map"), baseURL);&lt;br /&gt;    mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map"));   &lt;br /&gt;    mapview.setCenter(mpoint);   &lt;br /&gt;    mapview.setZoomLevel(mapZoom);    &lt;br /&gt;    &lt;br /&gt;    var customersTheme = new MVThemeBasedFOI('themebasedfoi1','mvdemo.customers') ;&lt;br /&gt;    &lt;br /&gt;    customersTheme.setBringToTopOnMouseOver(true);&lt;br /&gt;    &lt;br /&gt;    customersTheme.attachEventListener(MVEvent.MOUSE_CLICK, foiClick);&lt;br /&gt;    mapview.addThemeBasedFOI(customersTheme);&lt;br /&gt;                      &lt;br /&gt;    mapview.display();&lt;br /&gt;  }     &lt;br /&gt;&lt;br /&gt;  function foiClick(pointOfClick,foi)&lt;br /&gt;  {&lt;br /&gt;    alert("Locating all cities within 50 mile radius.");&lt;br /&gt;    &lt;br /&gt;    if(nearestCitiesTheme)&lt;br /&gt;    {&lt;br /&gt;        mapview.removeThemeBasedFOI(nearestCitiesTheme);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    nearestCitiesTheme = new MVThemeBasedFOI('cities-theme', 'mvdemo.cities_near_customer');&lt;br /&gt;    &lt;br /&gt;    //set the binding variable for this theme.&lt;br /&gt;    var x = foi.x;  // :1&lt;br /&gt;    var y = foi.y;  // :2&lt;br /&gt;    var distanceParam = "distance=50 unit=mile";  // :3&lt;br /&gt;    &lt;br /&gt;    nearestCitiesTheme.setQueryParameters(x,y, distanceParam);      &lt;br /&gt;    &lt;br /&gt;    nearestCitiesTheme.setBringToTopOnMouseOver(true);&lt;br /&gt;    mapview.addThemeBasedFOI(nearestCitiesTheme);&lt;br /&gt;  }&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body onload="javascript:showMap()"&gt;&lt;br /&gt;&amp;lt;h3&gt;Oracle Maps example - finding cities closest to a customer &amp;lt;/h3&gt;&lt;br /&gt;   &amp;lt;div id="map" style="left:0px; top:10px;width:100%; height:60%"&gt;&amp;lt;/div&gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The main things I want to point out here are:&lt;br /&gt;&lt;br /&gt;1. It uses a mouse-click listener on the customers theme, so that we can do the magic when user clicks on a customer marker.&lt;br /&gt;&lt;br /&gt;2. in the mouse click function (&lt;span style="font-weight:bold;"&gt;foiClick&lt;/span&gt;), we create a new theme-based FOI layer for the cities_near_customers theme. Then we set the 3 binding variables this theme's query condition is expecting, using setQueryParameters().&lt;br /&gt;&lt;br /&gt;3. In the demo I want to find out all the cities that are within 50 mile distance of a customer; you can easily use a different distance by changing the value of the distanceParam variable above.&lt;br /&gt;&lt;br /&gt;That's all for this post.&lt;br /&gt;&lt;br /&gt;-LJ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-5836340718339674957?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/5836340718339674957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=5836340718339674957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5836340718339674957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5836340718339674957'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2011/09/finding-sales-offices-within-certain.html' title='Finding sales offices within a certain distance of a customer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-i5mAWtVFruc/TnqafrKBrWI/AAAAAAAAAIQ/zNDuGC4NT80/s72-c/nearest.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8407800393882523782</id><published>2011-07-25T10:55:00.002-04:00</published><updated>2011-07-25T10:59:27.605-04:00</updated><title type='text'>iOS support in Oracle Maps API</title><content type='html'>With the latest patch release (version&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;11.1.1.5.1 found &lt;a href="http://www.oracle.com/technetwork/middleware/mapviewer/downloads/index.html"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.oracle.com/technetwork/middleware/mapviewer/downloads/index.html"&gt; &lt;/a&gt;),  MapViewer's Oracle Maps JavaScript API now fully supports iPhone/iPad map interaction using touch events such as pinch to zoom out, double tap to zoom in and other general touch events.   Your existing application will automatically get these support once you upgrade to the 11.1.1.5.1 version of MapViewer's oraclemaps.js lib.&lt;br /&gt;&lt;br /&gt;In addition to the iOS support, we are also looking into Android support in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8407800393882523782?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8407800393882523782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8407800393882523782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8407800393882523782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8407800393882523782'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2011/07/ios-support-in-oracle-maps-api.html' title='iOS support in Oracle Maps API'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8721595375330956106</id><published>2011-07-18T19:28:00.010-04:00</published><updated>2011-07-18T20:13:10.803-04:00</updated><title type='text'>Deploying MapViewer on IBM WebSphere 7</title><content type='html'>I just finished deploying MapViewer (the 11.1.1.5.1 patch release found &lt;a href="http://www.oracle.com/technetwork/middleware/mapviewer/downloads/index.html"&gt;here &lt;/a&gt;) on IBM WebSphere 7, using the main steps outlined below. Overall I would say it is just a typical process of deploying any J2EE enterprise applications on WebSphere.&lt;br /&gt;&lt;br /&gt;1. Log into WebSphere console, and pick the server instance to deploy MapViewer.&lt;br /&gt;&lt;br /&gt;2. Start deploying MapViewer by creating a new enterprise application.&lt;br /&gt;&lt;br /&gt;3. Download and save the mapviewer.ear file to your local file system if not already done so. Then select this EAR file when prompted. You do not need to unpack this .ear file.&lt;br /&gt;&lt;br /&gt;4. Go through the necessary steps by accepting all the defaults as instructed, but note the following special instructions.&lt;br /&gt;&lt;br /&gt; At step 7 "&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Map context roots for web modules&lt;/span&gt;", make sure the context root is set to "/mapviewer".&lt;br /&gt;&lt;br /&gt;Then at Step 8 "&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Map security roles to users or groups&lt;/span&gt;", make sure the admin user (&lt;span style="color: rgb(255, 0, 0);"&gt;virtuser&lt;/span&gt; in my case) is mapped to the &lt;span style="color: rgb(204, 0, 0);"&gt;map_admin_role&lt;/span&gt; defined by MapViewer.  You can ignore the secure_maps_role which is for demo purpose only.  Alternatively, you can also map other WebSphere users/groups to this map_admin_role.  Later you will use the mapped user or group to log into MapViewer's Admin page.&lt;br /&gt;&lt;br /&gt;5. You should get a summery page like below at the end of the deployment steps.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-m5LiblDQzKU/TiTEMLgio4I/AAAAAAAAAHs/ML0IdF3vYwU/s1600/Image14.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://1.bp.blogspot.com/-m5LiblDQzKU/TiTEMLgio4I/AAAAAAAAAHs/ML0IdF3vYwU/s320/Image14.png" alt="" id="BLOGGER_PHOTO_ID_5630841147646714754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now save the configuration and finish the deployment process. You should see MapViewer in the applications list, as illustrated below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-L989e_D4OXo/TiTE9YIiASI/AAAAAAAAAH0/hOdqxTygubc/s1600/Image16.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://2.bp.blogspot.com/-L989e_D4OXo/TiTE9YIiASI/AAAAAAAAAH0/hOdqxTygubc/s320/Image16.png" alt="" id="BLOGGER_PHOTO_ID_5630841992849260834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. Next, you need to find where WebSphere stores the mapviewer.ear's unpacked contents. The easiest way to do so, is to start MapViewer and log in to its admin page (by clicking on the Admin button from the home page at /mapviewer). Click the &lt;span style="font-weight: bold;"&gt;Management&lt;/span&gt; tab, then &lt;span style="font-weight: bold;"&gt;Configuration&lt;/span&gt;. Near the top of the page, you will see a line indicating where the mapViewerConfig.xml file was loaded from. In my case, it is:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/AppSrv01_Cell01/OracleAS  MapViewer.ear/web.war/WEB-INF/conf/mapViewerConfig.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This tells us that WebSphere has expanded the mapviewer.ear file into the directory:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/AppSrv01_Cell01/OracleAS  MapViewer.ear/&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;7. Now, we need to modify MapViewer's libraries in order for it to work properly in WebSphere 7.&lt;br /&gt;&lt;br /&gt;8.  Go to MapViewer's web.war/WEB-INF/lib folder, and physically remove the two jars: &lt;span style="color: rgb(255, 0, 0);"&gt;jsf-api.jar&lt;/span&gt; and &lt;span style="color: rgb(255, 0, 0);"&gt;jsf-impl.jar&lt;/span&gt;. This ensures all MapViewer web pages (which are written in JSF 1.0) work properly in WebSphere, since WebSphere already comes with a set of JSF 1.2 jars, and we don't want our (older) JSF jar files to conflict with these.&lt;br /&gt;&lt;br /&gt;9. From your Oracle 11g database install, copy the two JDBC driver related jars, &lt;span style="color: rgb(204, 0, 0);"&gt;ojdbc5.jar&lt;/span&gt; and &lt;span style="color: rgb(204, 0, 0);"&gt;orai18n.jar&lt;/span&gt;, and put them in MapViewer's web.war/WEB-INF/lib folder.  Alternatively, you can download these two jars from Oracle's JDBC OTN web page.  I used version 11.2.0.2 jars, but earlier versions of these jars should work too.&lt;br /&gt;&lt;br /&gt;10. Now, go to WebSphere console and restart the MapViewer application.&lt;br /&gt;&lt;br /&gt;From this point on,  you will just need to perform typical MapViewer configuration tasks such as adding a new data source et al.&lt;br /&gt;&lt;br /&gt;Final note, if before performing step 8 above (where you removed the two jsf jars), you already tried visiting some of the MapViwer pages, then it is likely you will have seen errors related to JSP exceptions. What you need to do (after performing step 8), is go to MapViewer's web.war folder, and touch every .jspx file so that their last modified timestamp gets changed. Do the same for the .jspx files under web.war/admin folder too.  This will force WebSphere to re-compile all the .jspx files (using the JSF 1.2 jars that came with WebSphere).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8721595375330956106?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8721595375330956106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8721595375330956106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8721595375330956106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8721595375330956106'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2011/07/deploying-mapviewer-on-ibm-websphere-7.html' title='Deploying MapViewer on IBM WebSphere 7'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-m5LiblDQzKU/TiTEMLgio4I/AAAAAAAAAHs/ML0IdF3vYwU/s72-c/Image14.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-7880624704330279585</id><published>2010-10-08T10:12:00.004-04:00</published><updated>2010-10-08T10:18:44.900-04:00</updated><title type='text'>Sending command-line admin requests to MapViewer</title><content type='html'>As you already know, MapViewer has several web pages where you can (after logging in) perform various admin tasks using XML requests. These tasks range from managing mapviewer's metadata cache, data sources, to tile layer pre-fetching.&lt;br /&gt;&lt;br /&gt;Sometimes one may have the need to perform these tasks from a command line or script. This is especially helpful if you need to automate certain aspects of managing a MapViewer instance (such as periodically clearing its tile layer cache or metadata cache).&lt;br /&gt;&lt;br /&gt;A while back we uploaded a simple tool that enables just that. If you are interested, please go to MapViewer's download page on OTN:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/middleware/mapviewer/downloads/index.html"&gt;http://www.oracle.com/technetwork/middleware/mapviewer/downloads/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and look for the &lt;strong&gt;Oracle Fusion Middleware                          MapViewer Admin Tool&lt;/strong&gt;.  It comes with a detailed readme describing how to use this tool to send admin requests to MapViewer server from a command line or from a script.&lt;br /&gt;&lt;br /&gt;Basically this tool allows you to specify the user name and password for the MapViewer admin URLs, and a XML document containing the admin request itself. It will then authenticate to the MapViewer and post the request doc to the server for processing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-7880624704330279585?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/7880624704330279585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=7880624704330279585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7880624704330279585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7880624704330279585'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/10/sending-command-line-admin-requests-to.html' title='Sending command-line admin requests to MapViewer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6073635136504713113</id><published>2010-09-14T12:08:00.006-04:00</published><updated>2010-09-14T13:22:54.364-04:00</updated><title type='text'>MapViewer performance tuning tips - part 4</title><content type='html'>In this post we will discuss best practices that deal with overall MapViewer deployment and configuration. We will also briefly touch base on how to monitor a running MapViewer instance to find troubling themes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Deployment and Configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MapViewer is a J2EE application that runs in all modern J2EE containers.  Deploying MapViewer is no different from deploying other J2EE applications.&lt;br /&gt;&lt;br /&gt;Ideally MapViewer should be deployed to a dedicated JVM. In Oracle iAS world, this will be a dedicated OC4J instance, and in the WebLogic Server (WLS) world, this will be a dedicated server in a domain.&lt;br /&gt;&lt;br /&gt;The reason is simple, MapViewer, while having a small foot print itself, often requires large amount of memory and CPU resources at run time depending on the work load.  So it is best to deploy MapViewer to a JVM instance that runs only MapViewer (and minimum amount of other J2EE supporting services), so that unnecessary contentions or even interruptions with other applications can be minimized.  It will also be easier to monitor MapViewer's performance when it is the only application running in the JVM.&lt;br /&gt;&lt;br /&gt;Note however there is nothing inherently wrong to deploy and run MapViewer with other J2EE applications in a shared JVM.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JVM heap size&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the key factors that will affect mapViewer performance is the amount of Heap memory allocated to the JVM.   A minimum of 512 MB is recommended.  On 32 bit operating systems, the maxium heap memory should not exceed 1.5GB (or 1500 MB).   A typical MapViewer install will run happily with 1GB of heap memory.&lt;br /&gt;&lt;br /&gt;You set heap memory via JVM's -Xmx option.&lt;br /&gt;&lt;br /&gt;Another important memory allocation parameter is the young generation size within the JVM. Young generation is a pool of memory reserved for short-lived objects.  A typical map request will result in MapViewer creating many such objects (for instance, to represent geographic features in memory),  so a sufficiently large young generation within the heap is crucial in preventing the JVM spending too much time on garbage collection.&lt;br /&gt;&lt;br /&gt;The young generation size can be set via the JVM parameter:&lt;br /&gt;-XX:newSize=80M&lt;br /&gt;and&lt;br /&gt;-XX:maxNewSize=200M&lt;br /&gt;&lt;br /&gt;The first parameter specifies a starting young generation size of 80MB, while the second parameter indicates a maximum young generation size of 200M.&lt;br /&gt;&lt;br /&gt;Typically the young generation size should not be more than 10 to 20 percent of the total heap size.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Spatial data cache&lt;/span&gt;&lt;br /&gt;MapViewer lets you optionally configure an in-memory geometry data cache via the "spatial_data_cache" tag in mapViewerConfig.xml.   This cache is used to buffer geometry features generated for themes whose caching mode is either set to ALL or NORMAL.  (Note that you set a theme's caching mode in Map Builder's theme editor, in the Advanced tab).&lt;br /&gt;&lt;br /&gt;When a theme's caching mode is set to ALL, MapViewer will load all of its features upon first request, and store the data in the cache.  It also creates an in-memory R-Tree index on the features.  All subsequent requests for this theme will be satisfied out of this cache, with no trips to the database.&lt;br /&gt;&lt;br /&gt;When a theme's caching mode is set to NORMAL, MapViewer will store the theme's features as they are loaded.   Note that MapViewer still queries the database every time such a theme is requested, but, in the event a feature is already in the cache, the un-marshaling or parsing of the database formatted geometry object is skipped, and the corresponding Java geometry object is reused out of the cache.&lt;br /&gt;&lt;br /&gt;Our recommendation regarding theme caching, is to use caching mode ALL for small amount of themes that are based on small to medium sized tables (with couple hundred to tens of thousands of features) with static contents.   And &lt;span style="font-weight: bold;"&gt;turn off NORMAL caching&lt;/span&gt; for all other themes.  In other words, a pre-defined geometry theme should have its cache mode set to either NONE or (in rare cases) ALL.&lt;br /&gt;&lt;br /&gt;The reason we do not recommend using the NORMAL caching mode is that it does not save much resource or time, in fact, it makes memory usage go up without much benefit at all.  We could even argue that if too many theme features are cached the JVM may start doing more and more garbage collections which can adversely affect performance.&lt;br /&gt;&lt;br /&gt;It is especially important to turn themes' caching off (by setting caching mode to NONE) before you start a tile pre-fetching task.  During a tile prefetching, large amount of map requests will be sent to the MapViewer, and any cached geometries will soon become out dated, or rather, out of the region of interest.&lt;br /&gt;&lt;br /&gt;Alternatively, prior to a large tile prefetching task, you can simply set the spatial data cache's max_cache_size to 0, which then automatically disables the caching of any theme's features.&lt;br /&gt;&lt;br /&gt;We recommend the spatial_data_cache to have a max size of no more than 200MB (on a 32 bit OS), or 15 percent of total heap memory.   In fact, we often found a performance boost by simply turning this cache off (setting its max size to zero)!&lt;br /&gt;&lt;br /&gt;Note that when you have themes with caching mode ALL, mapViewer may not be able to fit all of its data in the cache, in which case it automatically switches the theme's cache mode to NORMAL (which as we mentioned earlier is not very ideal).   So you need to carefully monitor any exception or error messages in the MapViewer log files to see if it failed to load all the data for themes with caching mode ALL.  In the event this happens, you should simply set the theme's cache mode to NONE.&lt;br /&gt;&lt;br /&gt;Note further that this internal memory cache will likely undergo major changes in MapViewer 11g R2 to truly boost performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Monitoring theme processing time&lt;/span&gt;&lt;br /&gt;When you notice a slow map response time, the first thing you do is open the URL /mapviewer/admin.html, and check for slow themes.&lt;br /&gt;&lt;br /&gt;This URL is only available in MapViewer version 11g R1 and later.  It will require admin log in. Once logged in, you will see the  Top Theme Queries text field, which you can submit to check which theme(s) are taking the most time to process.  This can be very useful in quickly catching themes that are taking too long to return data from the database (indicating either a database performance issue, or a badly defined theme), or are returning too many rows/features, or both.&lt;br /&gt;&lt;br /&gt;You can use the Reset Top Theme Queries form to wipe out existing top theme statistics, and MapViewer will automatically start collecting new stats for future map requests.  This is useful if you have made changes to some themes and want to see if they are still the top (bad) themes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can also use the same URL to check the status of your MapViewer, such as how many active DB connections/sessions are being used currently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6073635136504713113?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6073635136504713113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6073635136504713113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6073635136504713113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6073635136504713113'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/09/mapviewer-performance-tuning-tips-part.html' title='MapViewer performance tuning tips - part 4'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-762887549274770570</id><published>2010-05-19T15:26:00.003-04:00</published><updated>2010-05-19T15:43:31.706-04:00</updated><title type='text'>new public APIs for GeoCoding &amp; Routing</title><content type='html'>Some of you probably already know or are using various XML APIs to interact with our hosted LBS service at elocation.oracle.com. These XML APIs can be used to geocode your street addresses and get driving directions between two addresses, and also to get maps.&lt;br /&gt;&lt;br /&gt;Recently we have published a new set of simple JavaScript APIs for geocoding and routing. These APIs, or rather JavaScript libraries, are hosted on the same public elocation.oracle.com server, and are very easy to use from your HTML/AJAX applications.&lt;br /&gt;&lt;br /&gt;You can find more details about the new GeoCoding and Routing APIs in a presentation given during the Oracle Spatial User Conference held in Phoneix, Arizona last month.   Please download the presentation here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/otndocs/products/spatial/pdf/osuc2010_presentations/osuc2010_geocoder_sravada.pdf"&gt;http://download.oracle.com/otndocs/products/spatial/pdf/osuc2010_presentations/osuc2010_geocoder_sravada.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The presentation itself actually covers a lot of ground on Spatial's geocoding and routing capabilities. The new JS APIs and sample codes start from page 78.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For more presentations on both Spatial and MapViewer from this user conference (which was a smashing success), visit here:&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/spatial/htdocs/spatial_conf_1004_idx.html"&gt;http://www.oracle.com/technology/products/spatial/htdocs/spatial_conf_1004_idx.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-762887549274770570?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/762887549274770570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=762887549274770570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/762887549274770570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/762887549274770570'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/05/new-public-apis-for-geocoding-routing.html' title='new public APIs for GeoCoding &amp; Routing'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-414617473735704389</id><published>2010-03-25T14:20:00.002-04:00</published><updated>2010-03-25T14:35:00.109-04:00</updated><title type='text'>Out of memory when pre-fetching tiles on Linux?</title><content type='html'>If you suspect that your MapViewer instance is having memory related issues when pre-fetching large number of map tiles for a tile layer, and your OS is Linux, then maybe this tip will help you.&lt;br /&gt;&lt;br /&gt;Basically on Linux, the underlying file system itself will often aggressively use memory to cache file handles et al.  When you start a large tile pre-fetching task, it is not uncommon for MapViewer to create hundreds of thousands of files (map tile images) in a short period.  If the OS keeps caching these file system related "things" in memory, sooner or later your system will experience memory shortages, and this may cause MapViewer instance's JVM to crash or throw OutOfMemory exceptions.&lt;br /&gt;&lt;br /&gt;Fortunately there is an easy workaround (thanks to Ji who found and tested it).  All you (or your system admin) need to do is execute the following shell command as root:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;#&gt;  sync; echo 3 &gt; /proc/sys/vm/drop_caches&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This command will force the Linux kernel to release file system related caches. It is best to run this script periodically (by using a cron job) like every 3 hours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-414617473735704389?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/414617473735704389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=414617473735704389' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/414617473735704389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/414617473735704389'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/03/out-of-memory-when-pre-fetching-tiles.html' title='Out of memory when pre-fetching tiles on Linux?'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4395101092199102135</id><published>2010-02-03T14:24:00.018-05:00</published><updated>2010-02-03T15:02:49.735-05:00</updated><title type='text'>MapViewer performance tuning tips - part 3</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Middletier (MapViewer) side of things&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets now look at various factors within MapViewer itself that may affect overall performance. There are also settings in the J2EE container level that can affect both performance and scalability, which we will also touch upon later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Types of map requests&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In order to properly tune MapViewer performance and size your hardware for deployment, you need to first understand where and how MapViewer spends its resources. Because MapViewer resources are primarily spent on processing map requests, it is critical to understand  the types of requests that MapViewer may receive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XML map request&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The most basic type of request is simply a single XML document containing a complete map request posted to a MapViewer server’s URL directly. In this request doc, you can specify a base map, one or more additional themes (pre-defined or dynamic), a map query window, and a response format, among many other things.  When MapViewer receives such a request, it breaks down the basemap (if specified) into a list of composing themes, and then adds those additional themes to form a final theme list. It then queries and fetches data for all the themes on the list, rendering their data into one or more images. The result images are either directly streamed back to the client, or saved to the disk (in which case it is the URLs to the saved image files that are sent back to the client).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WMS requests&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MapViewer can also act as a WMS (Web Mapping Service) server. When it receives an incoming WMS request, the request is first converted into an XML map request, followed by the same workflow as if the client had just sent the XML request directly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oracle Maps requests&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the Oracle Maps JavaScript API, a typical “map” displayed by your application is often composed of one or more map tile layers, plus one or more Feature Of Interest (FOI) layers.  Whenever such a map is displayed or refreshed, the Mapviewer server will receive one FOI request for each visible FOI layer, plus multiple map tile image requests.&lt;br /&gt;&lt;br /&gt;For each FOI request, you can think of it as a simplified XML map request containing just a single theme. Once the features of this theme are loaded, MapViewer can either render them into individual FOI images (one small image for each feature), or combine all the features into a single image equal to the size of the application map window (when the whole-image option is enabled on the FOI layer).&lt;br /&gt;&lt;br /&gt;For each map tile request, if the tile (an image file stored on the server) does not already exist, MapViewer will need to generate it on the fly, by issuing itself an XML map request that contains just the name of the base map of the tile layer. The query window of this XML map request will be the data coverage area for this particular tile. The normal workflow then follows, and the result image is always stored to a specific folder on the server. It then serves this tile image file to the client.&lt;br /&gt;&lt;br /&gt;Note that once a map tile is generated and saved, all subsequent requests to that tile can be fulfilled extremely quickly, because MapViewer no longer needs to process/render it. Serving 100s of tile images per second is a typical performance. Whether your browser can load and display that many images quickly enough however is another matter and depends on such factors as your network connection speed.&lt;br /&gt;&lt;br /&gt;Because on the fly rendering of map tiles is expensive, you should consider tile pre-fetching by issuing an admin request to MapViewer when it is not under load (or on a non-production server). When MapViewer receives a pre-fetching request, it simply issues many concurrent map tile requests to itself, which are basically XML map requests as mentioned earlier.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JavaBean API requests&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If your application uses the JavaBean API of MapViewer, what happens is that as soon as you call oracle.lbs.mapclient.MapViewer’s run, pan or zoom method, it will construct a XML request document based on the information you have provided (name of basemap, themes you added, et al), and send it to the MapViewer server for processing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In the end it's all XML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So as you can see, no matter which API your application uses, all that the MapViewer rendering engine sees are XML map request docs. From now on we will shorten the verbose “XML map request doc” to just “map request”.  Note that client side map actions (clicking, zooming, panning et al) may or may not result in a map request to the server.  And sometimes one action on the client side may even lead to multiple map requests (such as when zooming an Oracle Maps map with multiple visible FOI layers).&lt;br /&gt;&lt;br /&gt;While the structure of MapViewer’s XML map request document can be very complex (the DTD for which can be found in the MapViewer User Guide), for simplicity we can think of it simply as a flat list of themes that MapViewer needs to process. Sometimes this list contains just one theme, and yet other times it may contain dozens or even hundreds of themes.&lt;br /&gt;&lt;br /&gt;Given the above understanding, let’s now look at how MapViewer processes the themes for a single map request.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Rendering themes of a map request&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When MapViewer processes a theme, it begins by issuing a query to the database to load the data for that theme (for Spatial based themes anyway). This query typically contains a spatial filter so that it only fetches data within the current viewing window. In the first two posts we have already covered how to speed up this phase by reducing the database time.&lt;br /&gt;&lt;br /&gt;Note that the rendering phase does not actually start until all the themes’ loading phases have completed. In other words, if your map request contains 10 themes, the rendering phase will not start until all 10 themes have finished loading their data from the database. In other words, &lt;span style="font-weight: bold;"&gt;all the data for all the themes will be held in memory until the map request itself is completed&lt;/span&gt;.  This is why it is important to consciously limit the number of features MapViewer might load for any given theme.  When a map request is completed (the final image rendered and saved or streamed back to the client), then all the loaded theme data and temporary shapes et al. are released from memory.&lt;br /&gt;&lt;br /&gt;During the actual rendering process, MapViewer iterates through all the loaded features of each theme, converting each geometry object from its raw database format into a Java representation when necessary, followed by the creation of a Java2D shape or point. Any necessary viewport transformation is also carried out at this stage.&lt;br /&gt;&lt;br /&gt;If a theme requires text annotation, then the labeling process occurs after all the themes have completed the shape-rendering phase.  Note that rendering follows the order of themes as they are listed in the map request, but for labeling the order is actually reversed. In other words, the last theme in the list is always labeled first.&lt;br /&gt;&lt;br /&gt;To summarize, the total time (excluding the database time) MapViewer spends on processing a single map request is affected by the following factors, roughly in decreasing order of significance:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The number of features loaded by each theme, and total number of features loaded.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The cost of rendering and labeling a single feature; this is in turn dictated by how complex each rendering and labeling style is, how detailed (in terms of number of vertices) are the geometries on average, et al.&lt;/li&gt;&lt;li&gt;The raw speed of the server’s disk, CPU and memory access&lt;/li&gt;&lt;li&gt;Whether anti-aliasing is requested&lt;/li&gt;&lt;li&gt;The amount of heap memory allocated to MapViewer&lt;/li&gt;&lt;li&gt;The version of JDK being used&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note that the first item (number of total features loaded) also has the biggest impact on MapViewer’s memory usage.&lt;br /&gt;&lt;br /&gt;While understanding how MapViewer works on a single map request certainly helps, in a real world scenario your MapViewer instance is often flooded with many concurrent map requests initiated by a variety of applications and clients using different APIs. In order to improve the scalability of MapViewer and properly size its hardware platform, one needs to understand how MapViewer handles concurrent map requests.  This is discussed next.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Database sessions, number of mappers and concurrent map requests&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Prior to MapViewer version 10.1.3.3, themes in a single map request load their data in parallel. In other words, if a map request is composed of 10 themes, then 10 database connections are obtained right off the bat, each executing the query of one theme. This “liberal” usage of database sessions often leads to scalability issues while providing marginal if any performance gain.&lt;br /&gt;&lt;br /&gt;Starting with MapViewer version 10.1.3.3, SQL execution of themes’ queries are carried out in a serial fashion within each map request. A theme cannot start loading its data until the theme before it in the list has finished its query execution and data loading. The end result is that only one database connection is ever needed when processing a map request, no matter how many themes may be involved.&lt;br /&gt;&lt;br /&gt;For a given data source, the maximum number of concurrent map requests MapViewer will accept is determined by the number of mappers specified for that data source. In other words, if a data source’s &lt;span style="font-style: italic; font-weight: bold;"&gt;number_of_mapper&lt;/span&gt; attribute is set to 10 (in the MapViewer config file), then a maximum of 10 concurrent map requests can be processed (for that data source) at any given time.  Because each map request will use one database connection, there can be a maximum of 10 active database sessions for the data source schema.  When the 11th map request arrives it must wait in the queue until a free mapper becomes available.&lt;br /&gt;&lt;br /&gt;You may recall that in MapViewer’s data source definition, there is also a &lt;span style="font-style: italic;"&gt;max_connection &lt;/span&gt;parameter. Starting with version 10.1.3.3, this parameter is no longer needed actually. This is because the maximum number of connections out there for a given data source is always bound by the &lt;span style="font-weight: bold; font-style: italic;"&gt;number_of_mapper &lt;/span&gt;parameter.&lt;br /&gt;&lt;br /&gt;Understanding the above, you may come to the conclusion that in order to increase the scalability you simply increase the number of mappers specified for a data source. The problem is that as you increase this number, you are also increasing the number of potential concurrent database sessions, the memory usage inside MapViewer and the amount of raw data it needs to push through its rendering pipeline. Finally, if you have multiple data sources defined, then the total concurrent map requests that can potentially arrive at the MapViewer is the sum of all the data sources' maximum concurrent requests.&lt;br /&gt;&lt;br /&gt;In the end, it is difficult to provide a clear-cut formula for determining what level of hardware you will need for your MapViewer instances. For instance, to determine roughly how much heap memory you need to allocate to a MapViewer instance, you need to look through each defined data source, finding out the average number of features each theme will load into memory and their geometric complexity, the number of themes in a typical map request, and the maximum concurrent map requests you wish to sustain. You also need to factor in things such as the in-memory geometry cache which are permanent. The best approach is to simply perform load tests against your application and monitor various logs and stats from your database and MapViewer instances to see if they are being saturated.&lt;br /&gt;&lt;br /&gt;In the next post we will dig in further and provide a number of practical tips on tuning MapViewer performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4395101092199102135?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4395101092199102135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4395101092199102135' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4395101092199102135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4395101092199102135'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/02/mapviewer-performance-tuning-tips-part.html' title='MapViewer performance tuning tips - part 3'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8591724559306738652</id><published>2010-01-14T16:25:00.012-05:00</published><updated>2010-01-21T09:57:29.519-05:00</updated><title type='text'>MapViewer performance tuning tips - part 2</title><content type='html'>This is the second post of the performance tuning tips series.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Finding bottlenecks in your Oracle database&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When you identify a theme with an unusually high "database time", it's time to look for database fixes. While typical database query optimization tips and tricks still apply, spatial queries have some unique characteristics, especially when the base table of your 'troubling' theme contains a large number of rows.&lt;br /&gt;From my own observations over the years, in many cases the "database time" of a MapViewer theme is actually database idle time or wait time. To be more specific, it is time the database spent waiting on disk I/Os. This is probably nothing shocking given that many MapViewer theme queries can fetch a lot of data in terms of pure volume (as measured in total bytes), especially when polygon or polyline type geometries are involved. Compared with a theme query, your typical shopping cart query that fetches a product listing is almost negligible as far as result data volume is concerned.  With a huge base table, chances are the database buffer cannot easily cache all the data, so it often needs to read physical disk blocks in order to fetch and return data for a query.&lt;br /&gt;&lt;br /&gt;When diagnosing database bottlenecks such as disk I/O waits , there are two powerful tools that come with Oracle database 10g and later versions. They are &lt;span style="font-weight: bold;"&gt;AWR &lt;/span&gt;(Advanced Workload Repository) and &lt;span style="font-weight: bold;"&gt;ADDM&lt;/span&gt; (Automated Database Diagnostic Monitor).  I found them invaluable in finding out why your MapViewer application is running slow, as they can not only identify I/O bottlenecks, but also many other kind of bottlenecks in the database. Note however they do not replace other tuning tools such SQL Tuning Adviser. In fact ADDM will often suggest you run SQL Tuning Adviser on specific SQL queries it deemed problematic.&lt;br /&gt;&lt;br /&gt;Let's jump right into action already. The following are the basic steps of using these two tools.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1  &lt;/span&gt; Login as DBA, then create a "before" snapshot of the database:&lt;br /&gt;    SQL&gt; exec dbms_workload_repository.create_snapshot;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2  &lt;/span&gt;Run your MapViewer application load tests. When done,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3  &lt;/span&gt;Create an "after" snapshot of the database, using the same command:&lt;br /&gt;   SQL&gt; exec dbms_workload_repository.create_snapshot;&lt;br /&gt;&lt;br /&gt;With these two snapshots, you can now execute the AWR and ADDM scripts to generate very informative and detailed reports on what happened inside the database during these two snapshots.  Keep in mind that the stats gathered by AWR and ADDM cover all database activities for all sessions, not just sessions created by MapViewer to perform theme queries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4 &lt;/span&gt; Generate an AWR report.&lt;br /&gt;To create an AWR report, execute the following as DBA:&lt;br /&gt;&lt;br /&gt;SQL&gt; @$ORACLE_HOME/rdbms/admin/awrrpti.sql&lt;br /&gt;&lt;br /&gt;When prompted, use HTML as the report format, and pick the two snapshots that you just created.&lt;br /&gt;&lt;br /&gt;After exiting SQL*Plus, you will see an HTML file containing the AWR report. Open it in your browser, and you will be greeted with a rich set of database activity reports.&lt;br /&gt;One of the interesting tables is titled "Top 5 Timed Foreground Events". For instance, this is the result from a recent AWR report generated for my spatial database:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/S0_M-pK66PI/AAAAAAAAAG8/PLr7YN5KItk/s1600-h/awr-events.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 130px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/S0_M-pK66PI/AAAAAAAAAG8/PLr7YN5KItk/s320/awr-events.png" alt="" id="BLOGGER_PHOTO_ID_5426781452580350194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, it shows that the database spent a whopping 96.55% of time waiting for User I/Os  (db file sequential reads) !   You can also check out several other tables such as "SQL ordered by Elapsed Time" and "SQL ordered by User I/O Wait Time" et al. It is also quite easy to find out which SQL is causing the most User I/Os, so on and so forth. Of course, your report may not show user I/O as an issue, but you get the idea.&lt;br /&gt;&lt;br /&gt;While AWR is very useful in providing you with a detailed break down of the database events and timings, it is best complemented by the adviser tool, ADDM, which reads off the same set of stats between the two snapshots, but can provide you with concrete advices on how to fix the bottlenecks in your database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5   &lt;/span&gt;Generate an ADDM report.&lt;br /&gt;&lt;br /&gt;While you can always use EM to view the ADDM report, here we just want to generate a simple text report using SQL*Plus by running the following command as DBA:&lt;br /&gt;&lt;br /&gt;SQL&gt; @$ORACLE_HOME/rdbms/admin/addmrpt.sql;&lt;br /&gt;&lt;br /&gt;Again this script will prompt you for the before and after snapshots' IDs.  Then it generates a .lst file which you can open with any text editor. In this text report you can find some very insightful suggestions. For instance, in one of my reports it detected that the disk containing the database data file of a large theme's base table has a below-average I/O speed, and suggested file striping as one way to reduce I/O waits. This is exactly the kind of advices that can immediately provide a performance boost.&lt;br /&gt;&lt;br /&gt;While I have been stressing the negative impact of heavy user I/Os, please note that your situation may very well be a different one. For instance you may not have an I/O bottleneck at all, so please be open minded when reading these two reports and be prepared to wrestle with other kind of issues within your database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Reorganizing your large tables&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Let's say you indeed find yourself in a similar situation where you see a lot of User I/O wait events, especially on your large tables (those with hundreds of thousands or millions of rows). Then how do you tackle this issue?   One of the most obvious remedies is to partition both your data tables and associated spatial indexes, if they are not already partitioned.&lt;br /&gt;&lt;br /&gt;The other tip, which will be described in detail now, is to reorganize the table rows based on the proximity of the geometry column. The basic idea is to store rows in neighboring database blocks if their geometries are close to each other spatially. When stored this way, rows that are to be returned for a theme query will more likely be found in neighboring data blocks on the disk, thus significantly reducing disk reads. This re-org will help most spatial queries with predicates such as SDO_FILTER or SDO_RELATE.  MapViewer for instance always uses SDO_FILTER for normal map panning/zooming and WMS type map requests, thus can benefit from such a table wide re-org, sometimes tremendously.&lt;br /&gt;&lt;br /&gt;Lets first see what happens if you do not reorganize your table.  Lets say each disk block has capacity for 100 rows. In a ‘uniform but random storage’ case, for any given query window, each "hit" block may only have 10 rows that are within this window. Now lets say a particular map request’s query window interacts with 1000 rows according to the spatial index. Assuming the table is so big and the incoming query windows change so often that the database data buffer is basically useless. What the database will end up doing then is reading 100 blocks from the disk in order to fetch these 1000 rows based on their ROWIDs produced by the spatial index. Reading so many blocks for a single query is very expensive. Now imagine 20 concurrent incoming map requests, each having a different viewport, and you can easily imagine why the database spends majority of its time waiting for disk reads.  As a result, the overall throughput of MapViewer plummets.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Script for Reorganizing a large table&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So how do you reorganize row storage? The following script is actually documented in the “Pro Oracle Spatial for Oracle Database 11g” book, Chapter 16.  It uses a linear tessellation key to re-order the geometries stored in a table. For those of you don’t have access to this book, here are the (slightly modified to fix several typos in the book) scripts you can copy and use.&lt;br /&gt;&lt;br /&gt;First, create a package in the MDSYS schema (it won't work in any other database schema!) :&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE PACKAGE clusterit&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;FUNCTION  linear_key(location sdo_geometry, diminfo sdo_dim_array)&lt;br /&gt; RETURN RAW deterministic;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE PACKAGE BODY clusterit&lt;br /&gt;AS&lt;br /&gt;FUNCTION linear_key&lt;br /&gt;(&lt;br /&gt;location sdo_geometry,&lt;br /&gt;diminfo sdo_dim_array&lt;br /&gt;)&lt;br /&gt;return RAW deterministic&lt;br /&gt;AS&lt;br /&gt;ctr sdo_geometry;&lt;br /&gt;rval raw(48);&lt;br /&gt;lvl  integer;&lt;br /&gt;BEGIN&lt;br /&gt;ctr := sdo_geom.sdo_pointonsurface(location, diminfo);&lt;br /&gt;lvl := 8;&lt;br /&gt;rval:=&lt;br /&gt; MD.HHENCODE(&lt;br /&gt;   ctr.sdo_point.x, diminfo(1).sdo_lb, diminfo(1).sdo_ub, lvl,&lt;br /&gt;   ctr.sdo_point.y, diminfo(2).sdo_lb, diminfo(2).sdo_ub, lvl);&lt;br /&gt;return rval;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;Next, log into the proper schema, and make a backup copy of the problem base table ‘&lt;span style="font-style: italic;"&gt;my_table&lt;/span&gt;’ (drop its spatial index first):&lt;br /&gt;&lt;br /&gt;SQL&gt; rename my_table to my_table_dup;&lt;br /&gt;&lt;br /&gt;Add a linear key column:&lt;br /&gt;&lt;br /&gt;SQL&gt; alter table my_table_dup add (linear_key raw);&lt;br /&gt;&lt;br /&gt;Then pre-compute and store the linear keys:&lt;br /&gt;&lt;br /&gt;SQL&gt; update my_table_dup a set linear_key =&lt;br /&gt;mdsys.clusterit.linear_key(a.geometry,&lt;br /&gt;(select diminfo from user_sdo_geom_metadata where table_name='MY_TABLE’ and column_name='GEOMETRY'));&lt;br /&gt;&lt;br /&gt;Finally, re-create the original table with proper storage order:&lt;br /&gt;&lt;br /&gt;SQL&gt; create table my_table as select * from my_table_dup where rownum &amp;lt;1;&lt;br /&gt;SQL&gt; insert into my_table select * from my_table_dup order by linear_key;&lt;br /&gt;SQL&gt; commit;&lt;br /&gt;SQL&gt; drop table my_table_dup;&lt;br /&gt;&lt;br /&gt;Don’t forget to recreate the spatial index on &lt;span style="font-style: italic;"&gt;my_table&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now re-run your MapViewer tests and see if this reorganization has helped its overall performance.  In one internal and not so rigorous experiment, after reorganizing a large table using the above approach, we observed as much as 300% increase in overall MapViewer throughput.&lt;br /&gt;&lt;br /&gt;In summary, AWR and ADDM are two of the more useful tools at your disposal when diagnosing high database times, and pay special attention to excessive database reads. This blog also assumes that your typical MapViewer theme is a pre-defined geometry theme with relatively simple query conditions. If your theme uses super complex dynamic SQL queries, then chances are you have more than disk reads to worry about.  In any case, database tuning in general, and Spatial SQL tuning in particular, is a very deep topic in itself, and I'm really in no position to offer any authoritative advice; so please don't blame me if my little tip above did not actually reduce your database time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8591724559306738652?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8591724559306738652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8591724559306738652' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8591724559306738652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8591724559306738652'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/01/mapviewer-performance-tuning-tips-part_14.html' title='MapViewer performance tuning tips - part 2'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/S0_M-pK66PI/AAAAAAAAAG8/PLr7YN5KItk/s72-c/awr-events.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6607116634702211257</id><published>2010-01-13T22:31:00.006-05:00</published><updated>2010-01-14T22:44:53.550-05:00</updated><title type='text'>MapViewer performance tuning tips - Part 1</title><content type='html'>This is the first of a series of blogs on MapViewer performance tuning.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overview &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When your MapViewer application performs poorly, there are many possible causes. Maybe your application is trying to (unnecessarily) display way too many features on a map or layer.  Maybe your database query (for dynamic themes) is too complicated and poorly optimized. Or maybe the database is doing too many disk I/Os when fetching the result set for a theme. It could also be due to a poorly configured MapViewer in-memory cache, an overwhelmed J2EE container (overloaded with many other applications), or just a very slow middle-tier box. It could be all of the above. The symptom however is always the same: when a user clicks on the map to pan or zoom, she will wait a long time before the map completely refreshes itself.&lt;br /&gt;&lt;br /&gt;So how to find the true bottleneck? Where do you start when diagnosing a slow mapping application?  The short answer, is to first identify the most time consuming theme(s) in your application, by looking at the log file.&lt;br /&gt;&lt;br /&gt;To do so set MapViewer's logging to the "finest" level, restart MapViewer, and run the application just long enough (or manually submit a single XML map request) to generate some meaningful logs. When scanning the freshly created MapViewer log file, for each theme you should see several log records like the following:&lt;br /&gt;&lt;br /&gt;FINER: [ THEME_DEMO_HIGHWAYS ] sql exec time: 585ms, total time &lt;span style="font-weight: bold;"&gt;loading&lt;/span&gt; 8 features: 2679ms.&lt;br /&gt;FINER: time to &lt;span style="font-weight: bold;"&gt;render&lt;/span&gt; theme THEME_DEMO_HIGHWAYS with 8 styled features: 72ms&lt;br /&gt;FINER: time to &lt;span style="font-weight: bold;"&gt;label&lt;/span&gt; theme THEME_DEMO_HIGHWAYS with 8 styled features: 112ms&lt;br /&gt;&lt;br /&gt;In the first log record, pay special attention to the last number, &lt;span style="font-weight: bold;"&gt;2679ms&lt;/span&gt;. This number (in milliseconds) indicates how long it took the database to execute the theme query, fetch result rows from data blocks, and transmit the result set over the network to MapViewer. For simplicity we will call this the "&lt;span style="font-weight: bold;"&gt;database time&lt;/span&gt;". Likewise let's call the combined rendering and labeling time indicated by the second and third log records the "&lt;span style="font-weight: bold;"&gt;MapViewer time&lt;/span&gt;"; after all that is how long MapViewer actually spent doing something useful instead of just waiting for and receiving data from the database.&lt;br /&gt;&lt;br /&gt;In many cases, the database time will be the dominant one, so you will need to poke around the database and speed things up there. We will get into it later.&lt;br /&gt;&lt;br /&gt;If the MapViewer time is high, we will need to find out why.  One recommended approach is to run a CPU profiling of the MapViewer instance. Again we will provide more details in a later post.&lt;br /&gt;&lt;br /&gt;Reducing these two types of time will have a positive impact on your application's performance regardless of which MapViewer API you are using.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;Note that starting with MapViewer 11g R1 there is another way to easily spot themes with excessive "database time". To do so you must first log in as the MapViewer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;admin user. Then manually open the /mapviewer/admin.html page in your browser. You will see a "Top theme queries" text area with a Submit button underneath it. Click on the submit button to see a list of top (database) time-consuming queries.  It's a good idea to first click the "Reset top theme queries" button so that MapViewer clears any existing list of themes and starts gathering fresh stats for you. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sometimes you may find that all of your themes are loaded and rendered quickly, but your application still takes a long time to display the map. Let's simply call this the "&lt;span style="font-weight: bold;"&gt;user time&lt;/span&gt;", since it is the time a user spent staring at a spinning clock or progress bar. When the sum of the "database time" and "MapViewer time" accounts  for only a small portion of the "user time", we suggest you use a FireFox addon called "FireBug" to find out what exactly is happening on the wire and in your browser.  For instance, is your Oracle Maps application overwhelming the remote web server with too many HTTP requests for map tile and FOI images? Maybe you should look into using the Whole-Image option for your FOI layer(s) to avoid transmitting many small pieces from MapViewer to the client every time a user pans or zooms the map. We will provide more tips like this in a later blog as well.&lt;br /&gt;&lt;br /&gt;To be continued...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6607116634702211257?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6607116634702211257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6607116634702211257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6607116634702211257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6607116634702211257'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/01/mapviewer-performance-tuning-tips-part.html' title='MapViewer performance tuning tips - Part 1'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6624975539095165690</id><published>2010-01-06T17:56:00.002-05:00</published><updated>2010-01-13T23:05:43.318-05:00</updated><title type='text'>MapViewer 11g patch 1 (11.1.1.2) available</title><content type='html'>We are pleased to announce the first patch of MapViewer 11g R1 release. This patch, officially versioned 11.1.1.2, includes many bug fixes and incremental enhancements.&lt;br /&gt;&lt;br /&gt;Please download the new patch &lt;a href="http://www.oracle.com/technology/software/products/mapviewer/index.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The release notes can be found &lt;a href="http://www.oracle.com/technology/software/products/mapviewer/text_files/mapviewer1112_readme.txt"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6624975539095165690?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6624975539095165690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6624975539095165690' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6624975539095165690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6624975539095165690'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2010/01/mapviewer-11g-patch-1-available.html' title='MapViewer 11g patch 1 (11.1.1.2) available'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4849515149425933150</id><published>2009-11-12T10:13:00.005-05:00</published><updated>2009-11-13T09:45:24.236-05:00</updated><title type='text'>Use Mapviewer to cache WMS maps as map tiles</title><content type='html'>&lt;div&gt;&lt;i&gt;Warning: Not all map services providers(WMS included) allow their maps to be cached by others. Before using MapViewer to cache maps served by any third party map services provider, you should consult the map services provider to make sure you're allowed to cache their maps.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;With the use of map source adapter, you can let MapViewer cache maps rendered by an external map services provider as map tiles and use them in your Oracle Maps application. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A map source adapter is basically a Java class that is called by MapViewer to construct requests understood by the external map services provider. MapViewer calls the map source adapter to construct map requests, send them to the map services provider,  fetch the maps and cache them as map tiles. Mapviewer is shipped with a map source adapter for WMS, which you can use to cache maps served by a WMS server. To better understand how the map source adapter works, you can take a look at the source code of the WMS adapter, which can be found at $mapviewer_deploy_home/web/WEB-INF/tileserver/mvadapter/mcsadapter/WMSAdapter.java.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are the steps to create a map tile layer using the WMS adapter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Login MapViewer's web admin page.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Enter the tile layer creation interface. Choose "External" when being asked for the the type of map source.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. On the tile layer creation page, you need to provide the configuration information  for the map tile layer. Besides regular tile layer configuration options such as name, data source, coordinate system, zoom level definition and etc,  you also need to provide the following information specific to an  external map tile layer. &lt;/div&gt;&lt;ul&gt;&lt;li&gt;Map service URL: The URL of the external map services provider. In the case of WMS, it should be the URL of the WMS server, e.g.  &lt;a class="moz-txt-link-freetext" href="http://www.myhost.com/mywms"&gt;http://www.myhost.com/mywms&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;Adapter class: The path of the WMS adapter class. It should be mcsadapter.WMSAdapter. &lt;/li&gt;&lt;li&gt;Jar file location: the full path of the file mvadapter.jar, which is under $mapviewer_deploy_home/web/WEB-INF/tileserver/mvadapter.  &lt;/li&gt;&lt;li&gt;Check "Adapter properties". &lt;/li&gt;&lt;li&gt;Add WMS parameters(name and value) for your map requests. Example: &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    name         value&lt;br /&gt;    -----------  -----&lt;br /&gt;    version      1.1.1&lt;br /&gt;    srs          EPSG:4326&lt;br /&gt;    layers       Countries,Borders&lt;br /&gt;    format       image/png &lt;br /&gt;    transparent  true &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;4. Click "Submit" to create the tile layer. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4849515149425933150?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4849515149425933150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4849515149425933150' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4849515149425933150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4849515149425933150'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/11/use-mapviewer-to-cache-wms-maps-as-map.html' title='Use Mapviewer to cache WMS maps as map tiles'/><author><name>Ji Yang</name><uri>http://www.blogger.com/profile/16611289627942490400</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-857255199656321230</id><published>2009-10-22T10:06:00.003-04:00</published><updated>2009-10-22T10:34:19.628-04:00</updated><title type='text'>Google maps tiles in a MapViewer app</title><content type='html'>Earlier this year I posted an &lt;a href="http://oraclemaps.blogspot.com/2009/03/displaying-mapviewer-tile-layers-over.html"&gt;article &lt;/a&gt;on how to display MapViewer generated tiles in a Google Maps application. In this post I will discuss how to display Google Maps tiles in a MapViewer/Oracle Maps application.   &lt;br /&gt;&lt;br /&gt;Starting with MapViewer 11g Release 1, a built-in Google Maps tile layer class has been added to the MapViewer's JavaScript API.  It is called MVGoogleTileLayer. Unfortunately it is not officially documented for 11g Release 1 (but will be in the upcoming patch and future releases). &lt;br /&gt;&lt;br /&gt;This API class is a thin wrapper of the official Google Maps API, and as such you will need to get your own Google Maps key for your application. &lt;br /&gt;&lt;br /&gt;The basic steps for displaying Google Maps in your Oracle Maps application are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1.  Import the Google Maps JavaScript library&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=[your-Google-Maps-API-key]"&lt;br /&gt;      type="text/javascript"&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Again you will need to get your own Google Maps key from Google and set it in the above script tag.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2. Add a Google Maps tile layer to the MVMapView object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mapview = new MVMapView(document.getElementById("map"), baseURL);&lt;br /&gt;baseMap = new MVGoogleTileLayer() ;&lt;br /&gt;mapview.addMapTileLayer(baseMap);&lt;br /&gt;&lt;br /&gt;That's all it takes to display a basic Google Maps map in your MapViewer application.&lt;br /&gt;&lt;br /&gt;You can also change the type of map you get from Google Maps. Here is an example:&lt;br /&gt;&lt;br /&gt;var mapType = G_HYBRID_MAP;  &lt;br /&gt;basemap.setMapType(mapType) ;&lt;br /&gt;&lt;br /&gt;Where basemap is a MVGoogleTileLayer instance. Note that G_HYBRID_MAP is a constant defined by the imported Google Maps API library and represents a hybrid Google Maps type. The full description for this method is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;setMapType(mapType)&lt;/span&gt;&lt;br /&gt;This method sets the type of the map, which can be one of the following predefined Google Map types, G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP and G_PHYSICAL_MAP.&lt;br /&gt;&lt;br /&gt;The only other method defined on the MVGoogleTileLayer class is getMapType(), which returns the current map type of the Google Maps being displayed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, as part of your application cleanup, please call Google Maps' clean-up method GUnload() (such as in the HTML page's unload event listener).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-857255199656321230?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/857255199656321230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=857255199656321230' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/857255199656321230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/857255199656321230'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/10/google-maps-tiles-in-mapviewer-app.html' title='Google maps tiles in a MapViewer app'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6535827372962062932</id><published>2009-10-05T10:35:00.007-04:00</published><updated>2009-10-05T11:56:31.150-04:00</updated><title type='text'>displaying table of longitude and latitude points</title><content type='html'>While in most cases your location data are stored in an Oracle database as SDO_GEOMETRY type, sometimes you may have certain point data stored simply as two numeric columns in a table (as longitude/latitude for instance).  So how can you display these points using MapViewer?  In this article I will present one of the more elegant options, namely using function-based index.&lt;br /&gt;&lt;br /&gt;The overall steps are:&lt;br /&gt;1. Create a database function that returns a SDO_GEOMETRY object from two numeric values.&lt;br /&gt;&lt;br /&gt;2. Treat this function as a SDO_GEOMETRY column by creating an entry in the USER_SDO_GEOM_METADATA view.&lt;br /&gt;&lt;br /&gt;3. Create a Spatial index on this function&lt;br /&gt;&lt;br /&gt;4. Create a pre-defined theme in Map Builder for this function.&lt;br /&gt;&lt;br /&gt;5. Profit.&lt;br /&gt;&lt;br /&gt;Lets say we have an existing table CITIES in the schema SCOTT.&lt;br /&gt;&lt;br /&gt;SQL&gt; desc cities;&lt;br /&gt; Name                            Null?    Type&lt;br /&gt; ------------------------------- -------- ----------------------------&lt;br /&gt; ID                                       NUMBER&lt;br /&gt; NAME                                     VARCHAR2(100)&lt;br /&gt; ALIASE                                   VARCHAR2(500)&lt;br /&gt; COUNTR                                   VARCHAR2(100)&lt;br /&gt; POP                                      NUMBER&lt;br /&gt; LON                                      NUMBER&lt;br /&gt; LAT                                      NUMBER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Where the two columns LON and LAT represent each city's location.&lt;br /&gt;&lt;br /&gt;So the first step is to create a function that generates an actual SDO_GEOMETRY object when supplied with a pair of (lon, lat).&lt;br /&gt;&lt;br /&gt;Step 1.  Create function&lt;br /&gt;&lt;br /&gt;Execute the following while logged in as SCOTT:&lt;br /&gt;&lt;br /&gt;create or replace function get_geometry(lon in number, &lt;br /&gt;                                        lat in number)&lt;br /&gt;return SDO_GEOMETRY &lt;span style="font-weight:bold;"&gt;deterministic &lt;/span&gt;is&lt;br /&gt;begin&lt;br /&gt;     return sdo_geometry(2001, 8307, sdo_point_type(lon, lat, NULL),NULL, NULL);&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that the function must be deterministic.&lt;br /&gt;&lt;br /&gt;Step 2. Populate Spatial metadata view&lt;br /&gt;&lt;br /&gt;Now that we have a function, we need to make Spatial and MapViewer treat it as if it's a real SDO_GEOMETRY column. All we need to do is insert an entry for this function in the USER_SDO_GEOM_METADATA view. Again execute the following as SCOTT:&lt;br /&gt;&lt;br /&gt;insert into user_sdo_geom_metadata values('CITIES',&lt;br /&gt; 'scott.get_geometry(lon,lat)',&lt;br /&gt; sdo_dim_array(&lt;br /&gt;   sdo_dim_element('Longitude', -180, 180, 0.005),&lt;br /&gt;   sdo_dim_element('Latitude', -90, 90, 0.005)), &lt;br /&gt; 8307);&lt;br /&gt; &lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 3. Create a Spatial index:&lt;br /&gt;We now need to create a Spatial index on the function, just like with any SDO_GEOMETRY columns.  Without a Spatial index, your SQL spatial queries won't work, and MapViewer cannot display them easily.&lt;br /&gt;&lt;br /&gt;create index CITIES_SDX on &lt;br /&gt;   CITIES(get_geometry(lon,lat))&lt;br /&gt;   indextype is mdsys.spatial_index;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 4. Create a Map Builder theme&lt;br /&gt;&lt;br /&gt;Open Map Builder, click Show Data to open the data navigator. You should find the CITIES table under the user SCOTT. Right click it and choose "Create Geometry Theme". You should see that the function we just created is already picked up as the Spatial column, as illustrated in this screen shot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vMku6FYL_58/SsoTKwl3eDI/AAAAAAAAAGY/1uolQCyztSg/s1600-h/func-index.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_vMku6FYL_58/SsoTKwl3eDI/AAAAAAAAAGY/1uolQCyztSg/s320/func-index.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5389140979665565746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Go through the normal process and complete the theme creation. You now have a pre-defined MapViewer theme that can be used to display those (X,Y) data. You can also add this theme to your AJAX map as a FoI (Feature Of Interest) layer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6535827372962062932?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6535827372962062932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6535827372962062932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6535827372962062932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6535827372962062932'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/10/displaying-table-of-longitude-and.html' title='displaying table of longitude and latitude points'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vMku6FYL_58/SsoTKwl3eDI/AAAAAAAAAGY/1uolQCyztSg/s72-c/func-index.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-406651129544925186</id><published>2009-09-18T16:09:00.015-04:00</published><updated>2009-11-03T13:59:50.090-05:00</updated><title type='text'>Why am I getting "Request string is too long for Oracle Maps' non-AJAX remoting"?</title><content type='html'>&lt;div&gt;You may get this error when your application is running in a web domain that is different from the one where mapviewer is running, e.g. your application is running on hostA and your MapViewer is running on hostB. Please note that different http ports on the same host are also two different domains. &lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oracle Maps client relies on AJAX to exchange data with the MapViewer server. In the scenario described above, when the client needs to send an AJAX  request to the Mapviewer server, it is sending the request across domain, which  is prohibited by all major web browsers. This is known as the cross-domain constraint. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We implemented our own non-AJAX  remoting mechanism to overcome this so that the Oracle Maps client can talk to the MapViewer in a different domain. This workaround has one limitation - the length  of the non-AJAX remoting request can not exceed certain limit. If the requests are within the limit, everything will work great. That's why in most cases Oracle Maps application works fine across domain out of box. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But things are not always that simple. If your application displays some complex theme based FOI layers, especially those with JDBC queries and/or dynamic styles, the underlying FOI requests might become too long to be handled by the non-AJAX remoting mechanism. As the result, you will get the error message mentioned in the title. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To solve this problem, you have two options.&lt;br /&gt;&lt;br /&gt;Option 1&lt;/div&gt;&lt;div&gt;---------&lt;/div&gt;&lt;div&gt;Deploy a MapViewer to the same domain where your application is  running. You don't have to configure this MapViewer to do any real mapping. You'll only need its proxy servlet, which can forward all requests from the client to the remote MapViewer that  does the real mapping. The client will send all AJAX requests to the proxy  servlet, which will then forward the requests to the remote MapViewer. Because the servlet is in the same domain as the application, there will be no cross-domain constraint when the client talks to the proxy. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In your application code, you need to call MVMapView.enableXMLHTTP(true)  at the beginning of your showMap function.&lt;br /&gt;&lt;br /&gt;function showMap()&lt;br /&gt;{&lt;br /&gt;MVMapView.enableXMLHTTP(true);&lt;br /&gt;var baseURL = &lt;a class="moz-txt-link-rfc2396E" href="http://oc4j-mv-domain/mapviewer"&gt;"http://hostB/mapviewer"&lt;/a&gt;; &lt;/div&gt;&lt;div&gt;mapview = new MVMapView(mapDiv, baseURL) ;&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Option 2&lt;/div&gt;&lt;div&gt;---------&lt;br /&gt;Configure a reverse proxy in your HTTP server to forward  requests sent to it to the remote MapViewer. This reverse proxy should  accept requests sent to http://hostA&lt;i class="moz-txt-slash"&gt;&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;mapviewer&lt;span class="moz-txt-tag"&gt;/&lt;/span&gt;&lt;/i&gt;* and forward them to  &lt;a class="moz-txt-link-freetext" href="http://remove-mapviewer:port/mapviewer/*"&gt;http://hostB/mapviewer/*&lt;/a&gt;. If your HTTP server is Apache, then this can be done by adding the  following two lines inside mod_proxy section in httpd.conf.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;IfModule mod_proxy.c&amp;gt;&lt;/div&gt;&lt;div&gt;    ProxyRequests Off&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;Directory proxy:*&amp;gt;&lt;/div&gt;&lt;div&gt;        Order deny,allow&lt;/div&gt;&lt;div&gt;        Deny from 127.0.0.1&lt;/div&gt;&lt;div&gt;        Allow from all&lt;/div&gt;&lt;div&gt;    &amp;lt;/Directory&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;    ProxyPass /mapviewer/ http://hostB/mapviewer/&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;    ProxyPassReverse /mapviewer/ http://hostB/mapviewer/&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;/IfModule&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Your application code should act as if the MapViewer is in the local  domain, because the proxy is acting as a local MapViewer instance. For better performance, you should explicitly specify the remote tile server URL when creating a tile layer. By doing so, you're telling the Oracle Maps client to get the map tiles directly from the remote MapViewer, not via the proxy, which also means better performance.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;function showMap()&lt;br /&gt;{ &lt;/div&gt;&lt;div&gt;var baseURL = &lt;a class="moz-txt-link-rfc2396E" href="http://www.blogger.com/post-edit.g?blogID=6774903665752106951&amp;amp;postID=406651129544925186"&gt;"http://"&lt;/a&gt;+document.location.host+"/mapviewer" ;&lt;br /&gt;mapview = new MVMapView(mapDiv, baseURL) ; &lt;/div&gt;&lt;div&gt;tileLayer = new MVMapTileLayer("myds.my_map", "http://hostB/mapviewer/mcserver"); &lt;/div&gt;&lt;div&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-406651129544925186?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/406651129544925186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=406651129544925186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/406651129544925186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/406651129544925186'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/09/why-am-i-getting-request-string-is-too.html' title='Why am I getting &quot;Request string is too long for Oracle Maps&apos; non-AJAX remoting&quot;?'/><author><name>Ji Yang</name><uri>http://www.blogger.com/profile/16611289627942490400</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-5000565912850900144</id><published>2009-07-31T10:37:00.003-04:00</published><updated>2009-07-31T10:41:38.479-04:00</updated><title type='text'>display labels with superscripts and subscripts</title><content type='html'>My colleague Albert Godfrind just sent me a nice tip on how to display map labels containing subscripts and superscripts. Thought I will share it with you all.&lt;br /&gt;&lt;br /&gt;I found the following to work for me. I create a table (using a NVARCHAR2 column for storing the label), then I populate it with two rows: one using the standard label, one using the sub/superscript notation.&lt;br /&gt;&lt;br /&gt;create table labels (&lt;br /&gt;  id number,&lt;br /&gt;  label nvarchar2(30),&lt;br /&gt;  geom sdo_geometry&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;insert into labels (id, label, geom)&lt;br /&gt;values (&lt;br /&gt;  1,&lt;br /&gt;  'm3 CH4 / min',&lt;br /&gt;  sdo_geometry (2001, null, sdo_point_type (1,1,null), null, null)&lt;br /&gt;);&lt;br /&gt;insert into labels (id, label, geom)&lt;br /&gt;values (&lt;br /&gt;  2,&lt;br /&gt;  unistr('m\00B3 CH\2084 / min'),&lt;br /&gt;  sdo_geometry (2001, null, sdo_point_type (1,2,null), null, null)&lt;br /&gt;);&lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;insert into user_sdo_geom_metadata values (&lt;br /&gt;  'LABELS',&lt;br /&gt;  'GEOM',&lt;br /&gt;  sdo_dim_array (&lt;br /&gt;    sdo_dim_element ('x', 0, 100, 0.05),&lt;br /&gt;    sdo_dim_element ('y', 0, 100, 0.05)&lt;br /&gt;  ),&lt;br /&gt;  null&lt;br /&gt;);&lt;br /&gt;commit;&lt;br /&gt;create index labels_sx on labels (geom) indextype is mdsys.spatial_index;&lt;br /&gt;&lt;br /&gt;Mapviewer then nicely renders the super/sub scripts as illustrated!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/SnMCOvXCYKI/AAAAAAAAAGQ/YmbudEdCQ3k/s1600-h/labels.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 253px; height: 193px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/SnMCOvXCYKI/AAAAAAAAAGQ/YmbudEdCQ3k/s320/labels.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5364634033382908066" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-5000565912850900144?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/5000565912850900144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=5000565912850900144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5000565912850900144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5000565912850900144'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/07/display-labels-with-superscripts-and.html' title='display labels with superscripts and subscripts'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/SnMCOvXCYKI/AAAAAAAAAGQ/YmbudEdCQ3k/s72-c/labels.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-3951136701365084990</id><published>2009-07-28T15:32:00.003-04:00</published><updated>2009-07-28T15:54:02.124-04:00</updated><title type='text'>Java API: setting array-type binding variables for a theme</title><content type='html'>MapViewer supports pre-defined themes that contain query conditions with one or more binding variables. For instance, we can define a theme COUNTIES_BY_STATES that displays all the counties whose State abbreviations are in a list supplied by user at run time. &lt;br /&gt;&lt;br /&gt;The query condition for this theme may look like the following:&lt;br /&gt;&lt;br /&gt;( state_abrv in (select column_value from table(:1)) )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In other words, when this theme is to be displayed, it will require a list of State abbreviations such as 'CA', 'WA', 'NY' as the value for its query's binding variable.  Note that this binding variable itself requires a SQL TABLE type.&lt;br /&gt;&lt;br /&gt;So how do you supply such an array of state abbreviation codes to the MapViewer from your Java application?  The following shows the sample code that does just that.&lt;br /&gt;&lt;br /&gt;   String [] values = { "MA","NY","ME","NH" };  //list of state abbreviations&lt;br /&gt;   ArrayParameter states = new ArrayParameter("MV_STRINGLIST",values);&lt;br /&gt;   Object [] values = new Object[1];  //array containing all binding variable values&lt;br /&gt;   values[0] = states;&lt;br /&gt;   mapViewer.setThemeBindingParameters("COUNTIES_BY_STATES", values);&lt;br /&gt;&lt;br /&gt;Note that basically you must use MapViewer's public ArrayParameter class to supply the list of states (or list of any strings/numbers) for a single table-type binding variable. Because in this case there is only one binding variable in this theme's query, the values array contains only one element, the ArrayParameter instance.&lt;br /&gt;&lt;br /&gt;Note also MV_STRINGLIST is a SQL list/table type created by MapViewer automatically in each data source (database schema). Please check the 11g MapViewer user's guide on more information about this pre-created type.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-3951136701365084990?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/3951136701365084990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=3951136701365084990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3951136701365084990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3951136701365084990'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/07/java-api-setting-array-type-binding.html' title='Java API: setting array-type binding variables for a theme'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8752859537699940872</id><published>2009-07-28T15:09:00.002-04:00</published><updated>2009-07-28T15:30:45.381-04:00</updated><title type='text'>multi-line labels</title><content type='html'>MapViewer supports labels or annotations that contain a newline char (ASCII char code 10).  However by default such characters are ignored by MapViewer during the map text labeling process, and the label text appears in a single line (unless there is a text wrap width specified.)&lt;br /&gt;&lt;br /&gt;To force MapViewer to honor the newline chars in a theme's label texts, the theme must use a TEXT labeling style with the "Honor Newline" attribute set to true. This can be done from MapBuilder's TEXT style editor, by simply selecting the &lt;span style="font-weight: bold;"&gt;Honor newline&lt;/span&gt; check box.  Now any theme that uses this TEXT style will automatically display any label text containing newline characters  with multiple lines.&lt;br /&gt;&lt;br /&gt;If your application is written using the MapViewer Java API, and you need to add individual geo-features with multi-line text labels to your map, then additional caution must be taken when constructing the label text with the newline char. Namely, the label text for a feature must be constructed like this:&lt;br /&gt;&lt;br /&gt;String textLabel = "LINE 1" + "%26#10;" + "LINE 2";&lt;br /&gt;&lt;br /&gt;Typically in an XML document (the Java API eventually will convert your current map request into an XML request before sending it to the MapViewer server), one uses &amp;amp;#10; to represent the newline char(10).  Because we are sending  the entire map request string using HTTP POST from map client to the server,  the character '&amp;amp;' itself must be escaped as '%26', hence the odd-looking  string &lt;span style="font-weight: bold;"&gt;%26#10;&lt;/span&gt;  representing an HTTP-safe newline character.&lt;br /&gt;&lt;br /&gt;So this is how you can construct a new feature with this text as its label:&lt;br /&gt;&lt;br /&gt;mapViewer.addPointFeature(centreX, centreY, 8265, "C.RED",  textLabel, "MY_TEXT_STYLE",&lt;br /&gt;                   null, null, true);&lt;br /&gt;&lt;br /&gt;where MY_TEXT_STYLE should be a TEXT type style with "Honor newline" enabled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8752859537699940872?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8752859537699940872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8752859537699940872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8752859537699940872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8752859537699940872'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/07/multi-line-labels.html' title='multi-line labels'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-2049080475041924193</id><published>2009-07-06T10:27:00.003-04:00</published><updated>2009-07-06T10:47:00.950-04:00</updated><title type='text'>MapViewer 11g R1 production kit released</title><content type='html'>We are excited to announce that as part of Oracle's Fusion Middleware 11g R1 release, MapViewer 11g R1 is now available for download!  Please navigate to OTN MapViewer home page here: http://www.oracle.com/technology/products/mapviewer/index.html.  The 11g R1 software can be found under the Software link on the right side of the page.&lt;br /&gt;&lt;br /&gt;Note that this release includes all the features and bug fixes of MapViewer patch 10.1.3.3 for WebLogic server, and we strongly encourage users to upgrade to the 11g R1 release to take advantage of the many new enhancements and a more stable Oracle Maps JavaScript API.&lt;br /&gt;&lt;br /&gt;It supports not only WebLogic server (and Oracle AS/OC4J 10.1.3.x), but also Tomcat 6.x and JBoss 4.x.  The full certification matrix can be found here:&lt;br /&gt;http://www.oracle.com/technology/products/mapviewer/htdocs/j2ee_server_support.html&lt;br /&gt;&lt;br /&gt;For the complete list of all the new and enchanced features of MapViewer 11g R1, please check out the New and Changed section of the MapViewer User's Guide, also downloadable from the OTN MapViewer home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-2049080475041924193?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/2049080475041924193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=2049080475041924193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2049080475041924193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2049080475041924193'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/07/mapviewer-11g-r1-production-kit.html' title='MapViewer 11g R1 production kit released'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-3965939974050920643</id><published>2009-06-19T16:02:00.005-04:00</published><updated>2009-06-19T16:51:41.674-04:00</updated><title type='text'>Running MapViewer on a WebLogic server cluster</title><content type='html'>This post describes how to deploy and run MapViewer version 11g R1 on a basic WebLogic cluster.&lt;br /&gt;&lt;br /&gt;For information and instructions on how to setup a simple WebLogic cluster, please check out this excellent &lt;a href="http://andrejusb.blogspot.com/2009/04/weblogic-load-balancing-for-oracle-adf.html"&gt;blog post&lt;/a&gt;.  If you followed his instructions, you will have a WebLogic domain that contains a cluster of 3 managed servers. Lets call this the main domain.   You will also create a second domain that contains a load balancing servlet (HttpClusterServlet) deployed as its only web application. Lets call this the proxy domain. The main domain's managed servers will be listening on ports 7003,7004 and 7005, while the proxy domain will be listening on 7001.  You will deploy MapViewer to the main domain (specifically, to its cluster which is composed of the 3 managed servers), but access MapViewer via port 7001 such as http://localhost:7001/mapviewer. Each web session accessing MapViewer will be redirected to one of the 3 managed server's in a round-robin fashion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Load balancing servlet's web.xml&lt;/span&gt;&lt;br /&gt;While following Andrejus' instructions, when it's about time to deploy the load balancing servlet to the proxy domain, you will need to create a web.xml file for the servlet. You can use the sample web.xml, however for MapViewer to function completely, I have attached my own web.xml below. The main difference is that in my example I added url patterns for .jspx, .png, .gif and .jpeg so these files also get redirected to the managed servers from the proxy servlet.&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd";&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;web-app&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;servlet-class&gt;&lt;br /&gt;  weblogic.servlet.proxy.HttpClusterServlet&lt;br /&gt;&amp;lt;/servlet-class&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;init-param&gt;&lt;br /&gt;&amp;lt;param-name&gt;WebLogicCluster&amp;lt;/param-name&gt;&lt;br /&gt;&amp;lt;param-value&gt;&lt;br /&gt;   localhost:7003|localhost:7004|localhost:7005&lt;br /&gt;&amp;lt;/param-value&gt;&lt;br /&gt;&amp;lt;/init-param&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/servlet&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;/mapviewer&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.jsp&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.htm&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.html&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.js&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.png&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.jspx&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.gif&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&gt;&lt;br /&gt;&amp;lt;servlet-name&gt;HttpClusterServlet&amp;lt;/servlet-name&gt;&lt;br /&gt;&amp;lt;url-pattern&gt;*.jpeg&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/web-app&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Deploy MapViewer&lt;/span&gt;&lt;br /&gt;Deploying MapViewer to a cluster is actually no different from deploying it to a regular WebLogic server. Basically, follow these simple steps (for more details, please check out the MapViewer User's Guide which has a step-by-step guide):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a WebLogic JDBC data source for your spatial database schema. Deploy (install) this data source to the cluster!  This container data source will be the basis of the MapViewer data source to be created in step 3.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unpack mapviewer.ear and setup the required directory tree structure (again details can be found in MapViewer's User's Guide).  This will be the working directory tree for MapViewer! Every WLS clustered server will start its own MapViewer instance out of this directory. Each started MapViewer instance will then load the config file from the WEB-INF/conf folder, as well as saving all generated map images and tiles into this same directory tree.  If your managed servers span different physical machines, then this folder needs to be on a shared network drive accessible by all the managed servers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify the MapViewer config file, located in the WEB-INF/conf/ folder, to set a proper logging level. Most importantly, you need to create a MapViewer data source based on the container data source you created in step 1. A simple example of such a data source looks like this:&lt;br /&gt;&amp;lt;map_data_source name="mvdemo"&lt;br /&gt;                 container_ds="jdbc/mvdemo"&lt;br /&gt;                 number_of_mappers="7"&lt;br /&gt;                 allow_jdbc_theme_based_foi="true"&lt;br /&gt; /&gt;&lt;br /&gt;Another thing you must modify in the config file, is the &amp;lt;save_images_at&gt; element. Make sure the url attribute is set to a URL that points to the proxy domain, for instance "http://localhost:7001/mapviewer/images". And change the path attribute to "../../images".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go to the console web page of the main domain, and deploy MapViewer from the exploded directory tree.  Note that when presented with the "Soure accessibility" page during deployment, make sure you select the last option ("I will make the deployment accessible from the following location")!  This is extremely important, as it ensures the MapViewer files are shared by all managed servers, and generated tiles/maps are shared also.&lt;/li&gt;&lt;li&gt;After deployment is done, simply access MapViewer from your browser http://localhost:7001/mapviewer. Everything should work just fine as if you are accessing a normal MapViewer server.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Verify that there are 3 MapViewer instances are running.  Go to the exploded MapViewer folder, and change into the directory mapviewer.ear/web.war/WEB-INF/conf/. There you should see a file mv_proc.id. Open it in any text editor, and you should see a number 3. This means MapViewer has acknowleged there are 3 separate instances running.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;You now have a MapViewer deployed and running on a cluster of managed WebLogic servers.  Each MapViewer instance will be accessing the same database schema using the same cluster-wide container data source for optimal usage of the JDBC connections.  MapViewer will intelligently and automatically avoid file name conflicts when generating and saving map images, FOI images as well map tiles. This is critical in a clustered environment since all MapViewer instances share a single physical working directory tree (the exploded MapViewer folder).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-3965939974050920643?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/3965939974050920643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=3965939974050920643' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3965939974050920643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3965939974050920643'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/06/running-mapviewer-on-weblogic-server.html' title='Running MapViewer on a WebLogic server cluster'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8596888710088898046</id><published>2009-05-29T10:25:00.004-04:00</published><updated>2009-05-29T10:56:21.949-04:00</updated><title type='text'>Using OpenStreetMap tiles with Oracle FMW MapViewer</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;The recently uploaded tutorial on using DigitalGlobe's online imagery delivery platform with MapViewer&lt;br /&gt;(http://www.oracle.com/technology/sample_code/products/mapviewer/index.html) discuss the MVCustomMapTileLayer interafce for accessing 3rd party tile providers. This post consists of sample code showing how it can be used with OSM tiles from {tiles|tah}.openstreetmap.org.&lt;br /&gt;&lt;br /&gt;The sample html code is listed below.&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;META http-equiv="Content-Type" content="text/html" charset=UTF-8"&amp;gt;&lt;br /&gt;&amp;lt;TITLE&amp;gt;OpenStreetMap as external tile layer&amp;lt;/TITLE&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="/mapviewer/fsmc/tutorial/t.css" /&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="http://sdolnx2.us.oracle.com:7777/mapviewer/fsmc/tutorial/t.css" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Change to your mapviewer instance e.g. localhost:8888/mapviewer/fsmc/jslib/oraclemaps.js&lt;br /&gt;&amp;lt;script language="Javascript" src="http://localhost:8888/mapviewer/fsmc/jslib/oraclemaps.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="Javascript" src="http://sdolnx2.us.oracle.com:7777/mapviewer/fsmc/jslib/oraclemaps.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language=javascript&amp;gt;&lt;br /&gt;&lt;br /&gt;// set up a map tile configuration so MapViewer knows the tiling scheme, i.e.&lt;br /&gt;// the number of zoom levels (20), tile size (256x256)&lt;br /&gt;// the tile width &amp;amp; height in real world coordinates at each zoom level&lt;br /&gt;//  the coordinate system (Spherical Mercator EPSG:3785), and&lt;br /&gt;// tile image file format (PNG)&lt;br /&gt;  var mapConfig=&lt;br /&gt;   {&lt;br /&gt;     "mapTileLayer":"OSM_MERCATOR",&lt;br /&gt;     "format":"PNG",&lt;br /&gt;     "coordSys":&lt;br /&gt;     {&lt;br /&gt;       "srid":3785,&lt;br /&gt;       "type":"PROJECTED",&lt;br /&gt;       "distConvFactor":1.0,&lt;br /&gt;       "minX":-2.0037508E7,"minY":-2.0037508E7,&lt;br /&gt;       "maxX":2.0037508E7,"maxY":2.0037508E7&lt;br /&gt;     },&lt;br /&gt;     "zoomLevels":&lt;br /&gt;     [&lt;br /&gt;       {"zoomLevel":0,"name":"","tileWidth":4.00750166855785E7,"tileHeight":4.00750166855785E7,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":1,"name":"","tileWidth":2.0037508E7,"tileHeight":2.0037508E7,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":2,"name":"","tileWidth":1.0018754E7,"tileHeight":1.0018754E7,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":3,"name":"","tileWidth":5009377.0,"tileHeight":5009377.0,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":4,"name":"","tileWidth":2504688.5,"tileHeight":2504688.5,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":5,"name":"","tileWidth":1252344.25,"tileHeight":1252344.25,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":6,"name":"","tileWidth":626172.125,"tileHeight":626172.125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":7,"name":"","tileWidth":313086.0625,"tileHeight":313086.0625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":8,"name":"","tileWidth":156543.03125,"tileHeight":156543.03125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":9,"name":"","tileWidth":78271.515625,"tileHeight":78271.515625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":10,"name":"","tileWidth":39135.7578125,"tileHeight":39135.7578125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":11,"name":"","tileWidth":19567.87890625,"tileHeight":19567.87890625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":12,"name":"","tileWidth":9783.939453125,"tileHeight":9783.939453125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":13,"name":"","tileWidth":4891.9697265625,"tileHeight":4891.9697265625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":14,"name":"","tileWidth":2445.98486328125,"tileHeight":2445.98486328125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":15,"name":"","tileWidth":1222.992431640625,"tileHeight":1222.992431640625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":16,"name":"","tileWidth":611.4962158203125,"tileHeight":611.4962158203125,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;      {"zoomLevel":17,"name":"","tileWidth":305.74810791015625,"tileHeight":305.74810791015625,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;      {"zoomLevel":18,"name":"","tileWidth":152.87405395507812,"tileHeight":152.87405395507812,"tileImageWidth":256,"tileImageHeight":256},&lt;br /&gt;       {"zoomLevel":19,"name":"","tileWidth":76.43702697753906,"tileHeight":76.43702697753906,"tileImageWidth":256,"tileImageHeight":256}&lt;br /&gt;     ]&lt;br /&gt;   };&lt;br /&gt; &lt;br /&gt;// create a custom map tile layer based on the above tile configuration&lt;br /&gt;// the second argument is a function that implements the getTileURL&lt;br /&gt;// interface for this particular map tile service&lt;br /&gt;  var osmBasemap = new MVCustomMapTileLayer(mapConfig, getOSMMapTileURL);&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Change to your mapviewer instance e.g. localhost:8888/mapviewer/fsmc/jslib/oraclemaps.js&lt;br /&gt;  var baseURL  = "http://localhost:8888/mapviewer" ;&lt;br /&gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;  var baseURL  = "http://sdolnx2.us.oracle.com:7777/mapviewer" ;&lt;br /&gt;  var mapview;&lt;br /&gt;  var oraTheme = null ;&lt;br /&gt;  var oraTileLayer = null;&lt;br /&gt;&lt;br /&gt;  function showMap()&lt;br /&gt;  {  &lt;br /&gt;    mapview = new MVMapView(document.getElementById("map"), baseURL);&lt;br /&gt;    mapview.addMapTileLayer(osmBasemap);&lt;br /&gt;    //  near london -36793, 6679715 in SRID 3785&lt;br /&gt;    var mpoint = MVSdoGeometry.createPoint(-36793.89, 6679715.42, 3785);  // near london 0.1,51.5,8307&lt;br /&gt; &lt;br /&gt;    mapview.setCenter(mpoint);&lt;br /&gt;    mapview.setZoomLevel(10);&lt;br /&gt;  &lt;br /&gt;    mapview.addNavigationPanel() ;  &lt;br /&gt;    mapview.display();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function showMapTileLayer(layerName)&lt;br /&gt;  {&lt;br /&gt;    mapview.removeMapTileLayer(osmBasemap) ;&lt;br /&gt;    eval("mapview.addMapTileLayer("+layerName+"Basemap)") ;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  function getOSMMapTileURL(tx, ty, tw, th, level)&lt;br /&gt;  {&lt;br /&gt;    var x = (tx-mapConfig.coordSys.minX)/mapConfig.zoomLevels[level].tileWidth ;&lt;br /&gt;    // Mapviewer's tile The tile numbering scheme, or mesh codes, for Oracle Maps’&lt;br /&gt;    // (see Section 8.2 of the MapViewer User Guide for more details) tiles is similar&lt;br /&gt;    // to that for Google Maps. There only difference is that the Y origin is&lt;br /&gt;    // at the lower left rather than the upper left, as is the case for Google tiles&lt;br /&gt;    var y = (mapConfig.coordSys.maxY-ty)/mapConfig.zoomLevels[level].tileHeight-1 ;&lt;br /&gt;    // use mapnik rendered tiles&lt;br /&gt;    //return "http://tile.openstreetmap.org/"+(level)+"/"+x+"/"+y+".png";&lt;br /&gt;    // use osmarender instead&lt;br /&gt;    return "http://tah.openstreetmap.org/Tiles/tile/"+(level)+"/"+x+"/"+y+".png";&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body onload="javascript:showMap()"&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Oracle Maps example - Custom map tile layer&amp;lt;/h3&amp;gt;&lt;br /&gt;This sample shows how the Oracle Maps GetMapTileURL interface could be used to display OSM map tiles.&lt;br /&gt;It implements code samples and technical details described on OSM sample code pages.&lt;br /&gt;This code is purely a sample explaining how to use the GetMapTileURL interface.&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;div id="map" style="width:800px;height:600px"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8596888710088898046?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8596888710088898046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8596888710088898046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8596888710088898046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8596888710088898046'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/05/using-openstreetmap-tiles-with-oracle.html' title='Using OpenStreetMap tiles with Oracle FMW MapViewer'/><author><name>Jayant</name><uri>http://www.blogger.com/profile/06118686005431618795</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-1631372238965563317</id><published>2009-05-01T14:20:00.009-04:00</published><updated>2009-05-01T14:52:00.837-04:00</updated><title type='text'>Storing your redline geometries in a database</title><content type='html'>MapViewer's JavaScript API provides a simple Red-line tool that you can use to let user draw simple shapes on the map. The tool can also return the coordinates of the shape, but there is no built-in mechanism to persistently store these shapes. &lt;br /&gt;&lt;br /&gt;In this article I will show you how to easily store such hand drawings in a database table, then display them on the map at a later time just as easily.&lt;br /&gt;&lt;br /&gt;The mains steps are:&lt;br /&gt;&lt;br /&gt;1. Create a database table with a SDO_GEOMETRY column (to store the geometries). Also create spatial index on it so we can query and display the table contents on our map later on.&lt;br /&gt;&lt;br /&gt;2. Create a very simple JSP page that will handle the task of storing a single geometry. It will take an geometry in a simple string format, then store it in the table using JDBC.&lt;br /&gt;&lt;br /&gt;3. Create a simple HTML-based Oracle Maps demo page, where user can create a shape on the map using a Redline tool. After getting hold of the Redline geometry, the page will issue an AJAX request to the JSP page, passing various aspects of the geometry (such as its type, SRID, and coordinates) as URL parameters.&lt;br /&gt;&lt;br /&gt;4. Display the table as a dynamic theme in the same HTML page.&lt;br /&gt;&lt;br /&gt;For more details, please download the zip &lt;a href="http://www.ljqian.com/oraclemaps/store.zip"&gt;file&lt;/a&gt; that includes the following 3 files:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;readme.txt&lt;/span&gt;:  Instructions for running this demo.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;store.jsp&lt;/span&gt;:   The JSP page that handles geometry storage.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;store.html&lt;/span&gt;:  The main demo page that lets you draw things and display stored geometries.&lt;br /&gt;&lt;br /&gt;The complete instructions are in the readme.txt file.&lt;br /&gt;&lt;br /&gt;If you have the built-in Oracle Maps tutorials running, this demo should be very easy to set up and run. To run the dmeo, simply open the store.html page in your browser. Post your comments below if you run into any issues. The following is a screenshot of the demo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vMku6FYL_58/SftDUm3jFwI/AAAAAAAAAGI/eoGM7mJuXU4/s1600-h/redline-store.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_vMku6FYL_58/SftDUm3jFwI/AAAAAAAAAGI/eoGM7mJuXU4/s320/redline-store.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5330928605233092354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, note that you can easily expand the demo to store more fields besides the geometry itself. It is also trivial to display these fields as attributes in the info-tip window when user clicks on any geometry displayed on the map.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-1631372238965563317?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/1631372238965563317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=1631372238965563317' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/1631372238965563317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/1631372238965563317'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/05/storing-your-redline-geometries-in.html' title='Storing your redline geometries in a database'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vMku6FYL_58/SftDUm3jFwI/AAAAAAAAAGI/eoGM7mJuXU4/s72-c/redline-store.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-9096997084606519688</id><published>2009-03-26T15:03:00.008-04:00</published><updated>2009-03-26T15:23:25.724-04:00</updated><title type='text'>Rotating map symbols using oriented points</title><content type='html'>Oracle Spatial supports the notion of oriented points, which are sdo_geometry points that contain additional coordinates of the end point for the orientation vector from the point itself, with values between -1 and 1. For instance, you can create an oriented point using the following SQL statement:&lt;br /&gt;&lt;br /&gt;INSERT INTO cola_markets VALUES(&lt;br /&gt; 91,&lt;br /&gt; 'oriented_point',&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;SDO_GEOMETRY(&lt;br /&gt;   2001,&lt;br /&gt;   NULL,&lt;br /&gt;   NULL,&lt;br /&gt;   SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0),&lt;br /&gt;   SDO_ORDINATE_ARRAY(12,14, 0.3,0.2))&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;The 12,14 identifies the physical coordinates of the point; and the 0.3,0.2 identifies the x and y coordinates (assuming 12,14 as the origin) of the end point of the orientation vector. The resulting orientation vector slopes upward at about a 34-degree angle, as illustrated in this figure:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/ScvS0wM9JoI/AAAAAAAAAF4/NePuJYzFyvs/s1600-h/oriented_pt.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 304px; height: 303px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/ScvS0wM9JoI/AAAAAAAAAF4/NePuJYzFyvs/s320/oriented_pt.gif" alt="" id="BLOGGER_PHOTO_ID_5317575588775274114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(The above description and figure are copied from the Oracle Spatial User's Guide).&lt;br /&gt;&lt;br /&gt;MapViewer has built-in support for such oriented points. What this means, is that if you apply a MARKER or TEXT style to such points (via a theme defined on the points table for instance), the MARKER (map symbol) or text itself will be oriented on the map according to the angle of its underlying data point, for every displayed data point. &lt;br /&gt;&lt;br /&gt;To better illustrate this support, I have created a simple Oracle Maps demo that displays the included &lt;span style="font-weight: bold;"&gt;oriented_points&lt;/span&gt; table in your MVDEMO sample data set, using a pin symbol.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;HEAD&gt;&lt;br /&gt;  &amp;lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"&gt;&lt;br /&gt;  &amp;lt;META NAME="GENERATOR" CONTENT="JDBC Demo"&gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="../t.css" /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="Javascript" src="/mapviewer/fsmc/jslib/oraclemaps.js"&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;SCRIPT TYPE="text/javascript"&gt;&lt;br /&gt;  var mapview;&lt;br /&gt;  var orientedtheme;&lt;br /&gt;  var baseQuery;&lt;br /&gt;  var baseURL  = "http://"+document.location.host+"/mapviewer";&lt;br /&gt;  var mapCenterLon = -122.49;&lt;br /&gt;  var mapCenterLat =  37.5106;&lt;br /&gt;  var mapZoom      =  3;  &lt;br /&gt;  var mpoint = MVSdoGeometry.createPoint(mapCenterLon,mapCenterLat,8307);     &lt;br /&gt;  function on_load_mapview() &lt;br /&gt;  {&lt;br /&gt;    mapview = new MVMapView(document.getElementById("map"), baseURL);&lt;br /&gt;    var basemap = new MVMapTileLayer("mvdemo.demo_map");&lt;br /&gt;    mapview.addMapTileLayer(basemap);   &lt;br /&gt;    mapview.setCenter(mpoint);   &lt;br /&gt;    mapview.setZoomLevel(mapZoom);  &lt;br /&gt; &lt;br /&gt;    orientedtheme= createOrientedTheme();&lt;br /&gt;    &lt;br /&gt;    mapview.addThemeBasedFOI(orientedtheme);&lt;br /&gt; &lt;br /&gt; var nav = new MVNavigationPanel() ;&lt;br /&gt;    var navPan = new MVMapDecoration(nav,0,0,null,null,4,4) ;&lt;br /&gt;    mapview.addMapDecoration(navPan) ;&lt;br /&gt;&lt;br /&gt;    mapview.display();&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  var pinMarker = "M.CYAN PIN" ;&lt;br /&gt;  &lt;br /&gt;  function createOrientedTheme()&lt;br /&gt;  {&lt;br /&gt;    baseQuery= "select shape from oriented_points";&lt;br /&gt;    var theme = "&amp;lt;themes&gt;&amp;lt;theme name='a_dynamic_theme' &gt;" +&lt;br /&gt;                "&amp;lt;jdbc_query asis='true' spatial_column='shape' jdbc_srid='8307' " +&lt;br /&gt;                "render_style='"+pinMarker+"' datasource='mvdemo'&gt;" + baseQuery +&lt;br /&gt;                "&amp;lt;/jdbc_query&gt;&amp;lt;/theme&gt;&amp;lt;/themes&gt;" ; &lt;br /&gt;    var theme = new MVThemeBasedFOI('oriented-theme',theme);    &lt;br /&gt;    theme.setBringToTopOnMouseOver(true);&lt;br /&gt; return theme;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;&amp;lt;/SCRIPT&gt;&lt;br /&gt;&amp;lt;/HEAD&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;BODY onload= javascript:on_load_mapview()&gt;&lt;br /&gt;&amp;lt;h3&gt;Displaying oriented points&amp;lt;/h3&gt;&lt;br /&gt;&amp;lt;div id="map" style=" width: 90%; height: 100%;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/BODY&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you save the above code as an HTML file in your MapViewer web directory, then open it from a browser, you will see four pin symbols, rotated according to the angles of the four oriented points from the table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/ScvU1q6G6HI/AAAAAAAAAGA/L-VllQvgjh0/s1600-h/oriented-pts.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 224px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/ScvU1q6G6HI/AAAAAAAAAGA/L-VllQvgjh0/s320/oriented-pts.png" alt="" id="BLOGGER_PHOTO_ID_5317577803557169266" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-9096997084606519688?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/9096997084606519688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=9096997084606519688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/9096997084606519688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/9096997084606519688'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/03/rotating-map-symbols-using-oriented.html' title='Rotating map symbols using oriented points'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/ScvS0wM9JoI/AAAAAAAAAF4/NePuJYzFyvs/s72-c/oriented_pt.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-2892626443553716353</id><published>2009-03-16T16:16:00.004-04:00</published><updated>2009-03-16T16:27:51.042-04:00</updated><title type='text'>Creating a separate Admin account for MapViewer (part 2: WLS)</title><content type='html'>In an earlier blog &lt;a href="http://oraclemaps.blogspot.com/2009/01/creating-separate-mapviewer-admin.html"&gt;post&lt;/a&gt; I described how to create a separate admin user for the MapViewer admin account in an Oracle Application Server 10.1.3.* installation.  This post follows up with instructions for WebLogic Server (version 9 and later).&lt;br /&gt;&lt;br /&gt;To set up an admin user account for MapViewer in WLS, you first create a new user in WebLogic, then map this user to the MapViewer admin role in MapViewer's deployment descriptor file (weblogic.xml).&lt;br /&gt;&lt;br /&gt;So first lets create a new WLS user. This is done using the WebLogic Admin Console. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating a user:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   1. In the left pane select Security Realms.&lt;br /&gt;   2. On the Summary of Security Realms page select the name of the realm (for example, myrealm) that your MapViewer-deployed domain uses.&lt;br /&gt;   3. On the Settings for Realm Name page select Users and Groups &gt; Users.&lt;br /&gt;&lt;br /&gt;      The User table displays the names of all users defined in the Authentication provider.&lt;br /&gt;   4. Click New.&lt;br /&gt;   5. In the Name field of the Create New User page enter the name of the user.&lt;br /&gt;      User names are case sensitive and must be unique. &lt;br /&gt;   6. (Optional) In the Description field, enter a description. The description might be the user's full name.&lt;br /&gt;   7. In the Provider drop-down list, select the Authentication provider for the user.&lt;br /&gt;&lt;br /&gt;      If multiple WebLogic Authentication providers are configured in the security realm, they will appear in the list. Select which WebLogic Authentication provider’s database should store information for the new user.&lt;br /&gt;   8. In the Password field, enter a password for the user.&lt;br /&gt;&lt;br /&gt;      The minimum password length for a user defined in the WebLogic Authentication provider is 8 characters. Do not use the username/password combination weblogic/weblogic in production.&lt;br /&gt;   9. Re-enter the password for the user in the Confirm Password field.&lt;br /&gt;  10. Click OK to save your changes.&lt;br /&gt;&lt;br /&gt;      The user name appears in the User table&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Assigning the new user to the MapViewer built-in admin role:&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;1. go to the exploded Mapviwer directory, find weblogic.xml under $MAPVIEWR_HOME/mapviewer.ear/web.war/WEB-INF/&lt;br /&gt;2. open weblogic.xml in a text editor. You will see something like following:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version = '1.0' encoding = 'US-ASCII'?&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;weblogic-web-app  xmlns="http://www.bea.com/ns/weblogic/90"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-role-assignment&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;role-name&gt;map_admin_role&amp;lt;/role-name&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;principal-name&gt;weblogic&amp;lt;/principal-name&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/security-role-assignment&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-role-assignment&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;role-name&gt;secure_maps_role&amp;lt;/role-name&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;principal-name&gt;weblogic&amp;lt;/principal-name&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/security-role-assignment&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/weblogic-web-app&gt;&lt;br /&gt;&lt;br /&gt;Replace the strings "weblogic" with the new user name. In my case I used "maplogic" as the new user name:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version = '1.0' encoding = 'US-ASCII'?&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;weblogic-web-app  xmlns="http://www.bea.com/ns/weblogic/90"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-role-assignment&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;role-name&gt;map_admin_role&amp;lt;/role-name&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;principal-name&gt;&lt;span style="font-weight:bold;"&gt;maplogic&lt;/span&gt;&amp;lt;/principal-name&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/security-role-assignment&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;security-role-assignment&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;role-name&gt;secure_maps_role&amp;lt;/role-name&gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;principal-name&gt;&lt;span style="font-weight:bold;"&gt;maplogic&lt;/span&gt;&amp;lt;/principal-name&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/security-role-assignment&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/weblogic-web-app&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Save this file. Then restart the domain. Now you will be able to use the new user and password to log into MapViewer's admin page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-2892626443553716353?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/2892626443553716353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=2892626443553716353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2892626443553716353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2892626443553716353'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/03/creating-separate-admin-account-for.html' title='Creating a separate Admin account for MapViewer (part 2: WLS)'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-5812965829880624314</id><published>2009-03-09T13:49:00.019-04:00</published><updated>2009-04-09T14:52:50.959-04:00</updated><title type='text'>Displaying MapViewer tile layers over Google Maps</title><content type='html'>&lt;span style="font-weight: normal;"&gt;A lot of folks have asked how to display a MapViewer tile layer in a Google Maps application. My colleague Jayant Sharma recently wrote a very nice note on this subject, using Google Maps' custom tile layer support. The following are the detailed instructions form his note. They can also be used with other map services such as Microsoft Virtual Earth. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Overview&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are 3 high-level steps involved:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Preparing your Oracle Spatial data by creating the EPSG:3785 coordinate system and transforming the data.&lt;/li&gt;&lt;li&gt;Creating a MapViewer tile layer for your data.&lt;/li&gt;&lt;li&gt;Displaying the MapViewer tile layer over Google Maps using its custom tile layer mechanism.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;Adding the EPSG:3785 coordinate system definition&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;The Google Maps are projected and rendered in a coordinate system known as Spherical Mercator (EPSG id 3785). So the data stored in an Oracle database and rendered by MapViewer into map tiles must also be in that coordinate system. This section describes the steps to add this new EPSG coordinate system definition into an Oracle database.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt;&lt;a name="_Toc217274911"&gt;&lt;span style="font-size:12;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:12;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Note: This requires a 10.2.0.4 database. Earlier versions do not have the required patch that enables transformations (SDO_CS.TRANSFORM) between this (3785) and other (e.g. WGS84 or BNG) coordinate systems.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Note 2: You may want to verify that the SRID 3785 does NOT already exist in the database. To verify, you can run the SQL query "select srid from mdsys.cs_srs where srid=3785" from any database user. If a row is returned, then you already have this SRID, and you should SKIP this section. With the latest 11g Oracle database this SRID does indeed exist out of the box.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Connect to your 10.2.0.4 database instance (with Spatial or Locator installed and enabled) as a privileged user (e.g. a user with the DBA role) and issue the following SQL statements.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="font-size:100%;"&gt;insert into MDSYS.SDO_ELLIPSOIDS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ELLIPSOID_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ELLIPSOID_NAME,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SEMI_MAJOR_AXIS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;UOM_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;INV_FLATTENING,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SEMI_MINOR_AXIS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;INFORMATION_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATA_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;IS_LEGACY,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;LEGACY_CODE)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;7059,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'Popular Visualisation Sphere',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;6378137,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9001,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;1.0000E+12,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'EPSG',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'FALSE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;null);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_DATUMS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATUM_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATUM_NAME,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATUM_TYPE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ELLIPSOID_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PRIME_MERIDIAN_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;INFORMATION_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATA_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SHIFT_X,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SHIFT_Y,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SHIFT_Z,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ROTATE_X,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ROTATE_Y,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;ROTATE_Z,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SCALE_ADJUST,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;IS_LEGACY,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;LEGACY_CODE)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;6055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'Popular Visualisation Datum',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'GEODETIC',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;7059,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8901,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;'EPSG',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'FALSE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_REF_SYSTEM (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SRID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_REF_SYS_NAME,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_REF_SYS_KIND,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_SYS_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATUM_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;geog_crs_datum_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;SOURCE_GEOG_SRID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PROJECTION_CONV_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;CMPD_HORIZ_SRID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;CMPD_VERT_SRID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;INFORMATION_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;DATA_SOURCE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;IS_LEGACY,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;LEGACY_CODE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;LEGACY_WKTEXT,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;LEGACY_CS_BOUNDS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;is_valid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;supports_sdo_geometry)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;4055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'Popular Visualisation CRS',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'GEOGRAPHIC2D',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;6422,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;6055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;6055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'EPSG',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'FALSE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'TRUE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;'TRUE');&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;INSERT INTO sdo_coord_ops (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_op_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_op_name,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_op_type,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;source_srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;target_srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_tfm_version,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_op_variant,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_op_method_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;UOM_ID_SOURCE_OFFSETS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;UOM_ID_TARGET_OFFSETS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;information_source,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;data_source,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;show_operation,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;is_legacy,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;legacy_code,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;reverse_op,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;is_implemented_forward,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;is_implemented_reverse)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'Popular Visualisation Mercator',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'CONVERSION',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'FALSE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;1);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_METHOD_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_VALUE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAM_VALUE_FILE_REF,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;UOM_ID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8801, -- Latitude of natural origin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9102);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_METHOD_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;PARAMETER_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_VALUE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAM_VALUE_FILE_REF,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;UOM_ID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8802, -- longitude of natural origin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9102);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_METHOD_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_VALUE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAM_VALUE_FILE_REF,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;UOM_ID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8805, -- scale factor at natural origin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;1,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;       &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9201);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_METHOD_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_VALUE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAM_VALUE_FILE_REF,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;UOM_ID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8806, -- false easting&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9001);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;COORD_OP_METHOD_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_ID,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAMETER_VALUE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;PARAM_VALUE_FILE_REF,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;UOM_ID)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9804,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;8807, -- false northing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;9001);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;INSERT INTO sdo_coord_ref_system (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_ref_sys_name,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_ref_sys_kind,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;coord_sys_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;datum_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;geog_crs_datum_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;source_geog_srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;projection_conv_id,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;cmpd_horiz_srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;cmpd_vert_srid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;information_source,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;data_source,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;is_legacy,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;legacy_code,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;legacy_wktext,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;legacy_cs_bounds,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;is_valid,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;supports_sdo_geometry)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;VALUES (&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;3785,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'Popular Visualisation CRS / Mercator',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'PROJECTED',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;4499,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;6055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;4055,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;19847,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;Null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;Null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'FALSE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;null,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'TRUE',&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;'TRUE');&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- create the tfm_plans, i.e. transformation rule.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- Note: This will result in an incorrect conversion since it ignores a datum shift &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- between the ellipsoid and the sphere. However the data will match up better&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- on google maps&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- first for wgs84 (8307)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;call sdo_cs.create_pref_concatenated_op( 83073785, 'CONCATENATED OPERATION 8307 3785', TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)), NULL); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- 4326 is the EPSG equivalent of 8307&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;call sdo_cs.create_pref_concatenated_op( 43263785, 'CONCATENATED_OPERATION_4326_3785', TFM_PLAN(SDO_TFM_CHAIN(4326, 1000000000, 4055, 19847, 3785)), NULL);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- similarly for os bng (oracle srid 81989 or epsg 27700 it is&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;call sdo_cs.create_pref_concatenated_op( 819893785, 'CONCATENATED OPERATION 81989 3785', TFM_PLAN(SDO_TFM_CHAIN(81989, -19916, 2000021, 1000000000, 4055, 19847, 3785)), NULL);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;-- 27700 is the EPSG equivalent of 81989&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;call sdo_cs.create_pref_concatenated_op( 277003785, 'CONCATENATED_OPERATION_27700_3785', TFM_PLAN(SDO_TFM_CHAIN(27700, -19916, 4277, 1000000000, 4055, 19847, 3785)), NULL); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;commit;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;Next transform existing data, or a copy of it, into 3785 and use it for generating the tiles. Otherwise the data will be transformed on the fly and that’ll slow down tile generation. The next section will use the MVDEMO sample data set to illustrate the steps.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;Setting up a Oracle map tile layer for Google Maps&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;The MVDEMO sample dataset has tables named counties, cities, interstates, and states and the data is in WGS84 (srid = 8307). There’s also a set of styles, themes, basemaps, and map tile caches defined. These definitions are stored in the USER_SDO_STYLES, SUER_SDO_THEMES, USER_SDO_MAPS, and USER_SDO_CACHED_MAPS views.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;The first step is to create a set of tables with the data transformed to 3785.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create table states_3785 as select * from states;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create table interstates_3785 as select * from interstates;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create table cities_3785 as select * from cities;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create table counties_3785 as select * from counties;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;update states_3785 set geom = sdo_cs.transform(geom, 3785);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;update interstates_3785 set geom = sdo_cs.transform(geom, 3785);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;update &lt;span style="color: rgb(0, 0, 0);"&gt;cities_3785&lt;/span&gt; set location = sdo_cs.transform(location, 3785);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;update counties_3785 set geom = sdo_cs.transform(geom, 3785);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;commit;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoToc1"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- insert metadata&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;insert into user_sdo_geom_metadata values('STATES_3785', 'GEOM', &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;span style="font-size:100%;"&gt;sdo_dim_array(sdo_dim_element('X',&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;-20037508.3427, 20037508.3427, 0.05), sdo_dim_element('Y',&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;-20037508.3427, 20037508.3427,&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;0.05)), 3785);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoBodyText"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;insert into user_sdo_geom_metadata values('INTERSTATES_3785', 'GEOM', &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;sdo_dim_array(sdo_dim_element('X',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427, 0.05), sdo_dim_element('Y',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427,&lt;span style=""&gt;  &lt;/span&gt;0.05)), 3785);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;insert into user_sdo_geom_metadata values('COUNTIES_3785', 'GEOM', &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;sdo_dim_array(sdo_dim_element('X',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427, 0.05), sdo_dim_element('Y',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427,&lt;span style=""&gt;  &lt;/span&gt;0.05)), 3785);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;insert into user_sdo_geom_metadata values('CITIES_3785', 'LOCATION', &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;sdo_dim_array(sdo_dim_element('X',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427, 0.05), sdo_dim_element('Y',&lt;span style=""&gt;  &lt;/span&gt;-20037508.3427, 20037508.3427,&lt;span style=""&gt;  &lt;/span&gt;0.05)), 3785);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- create spatial indexes &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create index states_3785_sidx on states_3785(geom) indextype is mdsys.spatial_index;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create index interstates_3785_sidx on interstates_3785(geom) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;indextype is mdsys.spatial_index;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create index counties_3785_sidx on counties_3785(geom) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;indextype is mdsys.spatial_index;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;create index cities_3785_sidx on cities_3785(location) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;indextype is mdsys.spatial_index parameters(‘layer_gtype=point’);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;The second step is to create the themes for these tables and after that a basemap made of these newly created themes. This can be done with MapBuilder or using SQL statements to copy the theme definitions while changing the referenced table names by appending a _3785 to the theme and table name.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 9"&gt;&lt;meta name="Originator" content="Microsoft Word 9"&gt;&lt;link rel="File-List" href="file:///C:/DOCUME%7E1/lqian/LOCALS%7E1/Temp/msoclip1/07/clip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:compatibility&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */ @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Arial Unicode MS"; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:134; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1 -369098753 63 0 4129023 0;} @font-face 	{font-family:"\@Arial Unicode MS"; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:134; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1 -369098753 63 0 4129023 0;}  /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} h1 	{mso-style-next:Normal; 	margin-top:12.0pt; 	margin-right:0in; 	margin-bottom:3.0pt; 	margin-left:0in; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:1; 	font-size:16.0pt; 	font-family:Arial; 	mso-fareast-font-family:"Times New Roman"; 	mso-font-kerning:16.0pt; 	font-weight:bold;} h3 	{mso-style-next:Normal; 	margin-top:12.0pt; 	margin-right:0in; 	margin-bottom:3.0pt; 	margin-left:0in; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:3; 	font-size:13.0pt; 	font-family:Arial; 	mso-fareast-font-family:"Times New Roman"; 	font-weight:bold;} h4 	{mso-style-next:Normal; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:4; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman"; 	font-weight:bold;} p.MsoToc1, li.MsoToc1, div.MsoToc1 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc2, li.MsoToc2, div.MsoToc2 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:12.0pt; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc3, li.MsoToc3, div.MsoToc3 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:12.0pt; 	margin-right:0in; 	margin-bottom:6.0pt; 	margin-left:23.75pt; 	text-align:center; 	mso-pagination:widow-orphan; 	tab-stops:right dotted 431.5pt; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc4, li.MsoToc4, div.MsoToc4 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:.5in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc5, li.MsoToc5, div.MsoToc5 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:48.0pt; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc6, li.MsoToc6, div.MsoToc6 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:60.0pt; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc7, li.MsoToc7, div.MsoToc7 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:1.0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc8, li.MsoToc8, div.MsoToc8 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:84.0pt; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoToc9, li.MsoToc9, div.MsoToc9 	{mso-style-update:auto; 	mso-style-next:Normal; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:0in; 	margin-left:96.0pt; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoHeader, li.MsoHeader, div.MsoHeader 	{margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	tab-stops:center 3.0in right 6.0in; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoFooter, li.MsoFooter, div.MsoFooter 	{margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	tab-stops:center 3.0in right 6.0in; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p.MsoBodyText, li.MsoBodyText, div.MsoBodyText 	{margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} p 	{margin-right:0in; 	mso-margin-top-alt:auto; 	mso-margin-bottom-alt:auto; 	margin-left:0in; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Arial Unicode MS";} code 	{mso-ascii-font-family:"Arial Unicode MS"; 	mso-fareast-font-family:"Arial Unicode MS"; 	mso-hansi-font-family:"Arial Unicode MS"; 	mso-bidi-font-family:"Arial Unicode MS";} pre 	{margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; 	font-size:10.0pt; 	font-family:"Arial Unicode MS";} span.codeinlineitalic 	{mso-style-name:codeinlineitalic;} span.bold 	{mso-style-name:bold;} span.italic 	{mso-style-name:italic;} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */ @list l0 	{mso-list-id:804547922; 	mso-list-type:hybrid; 	mso-list-template-ids:1303128656 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Symbol;} @list l1 	{mso-list-id:844712336; 	mso-list-type:hybrid; 	mso-list-template-ids:-1572959160 244233390 431101978 -228046960 -946292362 -1929090258 716326206 -1427574124 -642632834 -1030171382;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:891891607; 	mso-list-type:hybrid; 	mso-list-template-ids:1255859072 67698689 627060852 1429776844 -1974960778 -1180015352 2056826892 1165282200 752407574 -489930688;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Symbol;} @list l3 	{mso-list-id:1523398797; 	mso-list-type:hybrid; 	mso-list-template-ids:-1058234628 67698703 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l3:level1 	{mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l4 	{mso-list-id:1596131365; 	mso-list-type:hybrid; 	mso-list-template-ids:609399340 -385715264 735602110 -966495114 1043488630 -1817016728 -1474129496 1414587924 329561812 1544814880;} @list l4:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l5 	{mso-list-id:1753552203; 	mso-list-type:hybrid; 	mso-list-template-ids:1255859072 1409056456 627060852 1429776844 -1974960778 -1180015352 2056826892 1165282200 752407574 -489930688;} @list l5:level1 	{mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in;} @list l6 	{mso-list-id:1842311736; 	mso-list-type:hybrid; 	mso-list-template-ids:895486052 744774196 -404064070 -85289948 -858339490 -79511876 -934650912 502565614 1845136726 -1244617904;} @list l6:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l7 	{mso-list-id:2076732732; 	mso-list-type:hybrid; 	mso-list-template-ids:-1058234628 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l7:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Symbol;} ol 	{margin-bottom:0in;} ul 	{margin-bottom:0in;} --&gt; &lt;/style&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;insert into user_sdo_themes select name || ‘_3785’, description, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;       &lt;/span&gt;base_table || ‘_3785’,&lt;span style=""&gt;  &lt;/span&gt;geometry_column, styling_rules &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;from user_sdo_themes where base_table in (‘STATES’, ‘INTERSTATES’, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style="font-size:100%;"&gt;‘COUNTIES’, ‘CITIES’) and length(name) &amp;lt; 27&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;commit;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- if a theme name is &gt; 27 chars long modify it individually&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- It’ll has to be manually modified in the basemap definition &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- too. E.g there may be one name new_theme_demo_highways_line&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;-- that can be named theme_demo_highways_line_3785 instead&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:100%;"  &gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Next define a basemap using these themes. You can use the following SQL statements to manually create a new basemap named DEMO_MAP_3785 that is similar to DEMO_MAP, then update its referenced theme names and map scales:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoToc1"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;insert into user_sdo_maps select ‘DEMO_MAP_3785’, description,definition&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;from user_sdo_maps where name=’DEMO_MAP’;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;update user_sdo_maps set definition=&lt;br /&gt;'&amp;lt;?xml version="1.0" standalone="yes"?&gt;&lt;br /&gt;&amp;lt;map_definition&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_STATES_3785" /&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_COUNTIES_3785" min_scale="3000000.0" max_scale="0.0" scale_mode="RATIO"/&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_STATES_LINE_3785" min_scale="3000000.0" max_scale="0.0" scale_mode="RATIO"/&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_HIGHWAYS_3785"/&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_CITIES_3785" min_scale="6000000.0" max_scale="0.0" scale_mode="RATIO"/&gt;&lt;br /&gt;   &amp;lt;theme name="THEME_DEMO_BIGCITIES_3785"/&gt;&lt;br /&gt;&amp;lt;/map_definition&gt;'&lt;br /&gt;where name='DEMO_MAP_3785';&lt;br /&gt;commit;&lt;/span&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;The third step is to create a map tile layer. Navigate to MapViewer’s Admin console (i.e. go to &lt;a href="http://localhost:8888/mapviewer/"&gt;http://localhost:8888/mapviewer/&lt;/a&gt; , click on the Admin button, log in as a oc4jadmin) and then on the Manage Map Tile Layers tab. Then on Create link in the left panel and then the Continue button. Name the map tile layer, e.g. demo_map_3785, choose mvdemo as the data source and&lt;i&gt; &lt;/i&gt;demo_map_3785 as the basemap. Check the transparent checkbox next to the Background color selection box. The default color will be ignored and the map tiles will be rendered on a transparent background. Then set # Zoom Levels to 20 (the number used by Google Maps), ignore the scale level settings, SRID to 3785, Min X to -20037508.3427, Max X to 20037508.3427, Min Y to -20037508.3427, and Max Y to 20037508.3427. Leave the tile size as 256 by 256 and format as PNG. Do NOT click submit. Click XML Mode instead. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;To workaround a bug in the UI, which does not let you enter specific tile sizes, we will manually enter this information in XML mode. So click on XML mode and copy and paste the following XML fragment over the existing&lt;span style="font-weight: bold;"&gt; &amp;lt;zoom levels&gt; … &amp;lt;/zoom_levels&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;zoom levels=""&gt;&lt;/zoom&gt;&lt;/span&gt;fragment. (Note: the following values have been revised and are correct as of April 09 2009)&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;   &amp;lt;zoom_levels levels="20" min_scale="0.0" max_scale="0.0" min_tile_width="76.43702697753906" min_tile_height="4.0075016E7"&gt;&lt;br /&gt;      &amp;lt;zoom_level level="0" name="" description="" scale="0.0" tile_width="4.0075016E7" tile_height="4.0075016"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="1" name="" description="" scale="0.0" tile_width="2.0037508E7" tile_height="2.0037508E7"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="2" name="" description="" scale="0.0" tile_width="1.0018754E7" tile_height="1.0018754E7"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="3" name="" description="" scale="0.0" tile_width="5009377.0" tile_height="5009377.0"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="4" name="" description="" scale="0.0" tile_width="2504688.5" tile_height="2504688.5"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="5" name="" description="" scale="0.0" tile_width="1252344.25" tile_height="1252344.25"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="6" name="" description="" scale="0.0" tile_width="626172.125" tile_height="626172.125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="7" name="" description="" scale="0.0" tile_width="313086.0625" tile_height="313086.0625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="8" name="" description="" scale="0.0" tile_width="156543.03125" tile_height="156543.03125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="9" name="" description="" scale="0.0" tile_width="78271.515625" tile_height="78271.515625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="10" name="" description="" scale="0.0" tile_width="39135.7578125" tile_height="39135.7578125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="11" name="" description="" scale="0.0" tile_width="19567.87890625" tile_height="19567.87890625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="12" name="" description="" scale="0.0" tile_width="9783.939453125" tile_height="9783.939453125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="13" name="" description="" scale="0.0" tile_width="4891.9697265625" tile_height="4891.9697265625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="14" name="" description="" scale="0.0" tile_width="2445.98486328125" tile_height="2445.98486328125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="15" name="" description="" scale="0.0" tile_width="1222.992431640625" tile_height="1222.992431640625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="16" name="" description="" scale="0.0" tile_width="611.4962158203125" tile_height="611.4962158203125"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="17" name="" description="" scale="0.0" tile_width="305.74810791015625" tile_height="305.74810791015625"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="18" name="" description="" scale="0.0" tile_width="152.87405395507812" tile_height="152.87405395507812"/&gt;&lt;br /&gt;      &amp;lt;zoom_level level="19" name="" description="" scale="0.0" tile_width="76.43702697753906" tile_height="76.43702697753906"/&gt;&lt;br /&gt;   &amp;lt;/zoom_levels&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;zoom_levels levels="20" min_scale="0.0" max_scale="0.0" min_tile_width="76.3514968720267" min_tile_height="4.00301735920411E7"&gt;&lt;/zoom_levels&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="0" name="" description="" scale="0.0" tile_width="4.00301735920411E7" tile_height="4.00301735920411E7"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="1" name="" description="" scale="0.0" tile_width="2.00150867960206E7" tile_height="2.00150867960206E7"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="2" name="" description="" scale="0.0" tile_width="1.00075433980103E7" tile_height="1.00075433980103E7"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="3" name="" description="" scale="0.0" tile_width="5003771.69900514" tile_height="5003771.69900514"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="4" name="" description="" scale="0.0" tile_width="2501885.84950257" tile_height="2501885.84950257"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="5" name="" description="" scale="0.0" tile_width="1250942.92475129" tile_height="1250942.92475129"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="6" name="" description="" scale="0.0" tile_width="625471.462375643" tile_height="625471.462375643"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="7" name="" description="" scale="0.0" tile_width="312735.731187821" tile_height="312735.731187821"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="8" name="" description="" scale="0.0" tile_width="156367.865593911" tile_height="156367.865593911"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="9" name="" description="" scale="0.0" tile_width="78183.9327969554" tile_height="78183.9327969554"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="10" name="" description="" scale="0.0" tile_width="39091.9663984777" tile_height="39091.9663984777"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="11" name="" description="" scale="0.0" tile_width="19545.9831992388" tile_height="19545.9831992388"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="12" name="" description="" scale="0.0" tile_width="9772.99159961942" tile_height="9772.99159961942"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="13" name="" description="" scale="0.0" tile_width="4886.49579980971" tile_height="4886.49579980971"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="14" name="" description="" scale="0.0" tile_width="2443.24789990485" tile_height="2443.24789990485"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="15" name="" description="" scale="0.0" tile_width="1221.62394995243" tile_height="1221.62394995243"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="16" name="" description="" scale="0.0" tile_width="610.811974976214" tile_height="610.811974976214"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="17" name="" description="" scale="0.0" tile_width="305.405987488107" tile_height="305.405987488107"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="18" name="" description="" scale="0.0" tile_width="152.702993744053" tile_height="152.702993744053"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;zoom_level level="19" name="" description="" scale="0.0" tile_width="76.3514968720267" tile_height="76.3514968720267"&gt;&lt;/zoom_level&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Now click the Submit button.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Click on the Manage link and you should see the Existing Map Tile Layers list. Select demo_map_3785 and click on View Map / Manage Tiles. Enter –12000000 for Center X, and 5000000 for Center Y and Show Map. Or just click show map and pan to the left. You should see tiles being generated and displayed. Click return. Below is a screenshot of this new tile layer:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/SbVb6cUhRJI/AAAAAAAAAFo/NuOnQ04H16E/s1600-h/tile-overlay-mv.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 238px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/SbVb6cUhRJI/AAAAAAAAAFo/NuOnQ04H16E/s320/tile-overlay-mv.png" alt="" id="BLOGGER_PHOTO_ID_5311252395146167442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;The actual display code&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The following sample code uses the tile served up by MapViewer in a Google Maps application. You should save it as tileoverlay-simple.html.&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"&gt;&lt;br /&gt;&amp;lt;head&gt;&lt;br /&gt;&amp;lt;title&gt;Google Maps JavaScript API Example: Tile Overlays&amp;lt;/title&gt;&lt;br /&gt;&amp;lt;script src="http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=ABQIAAAA9WYjhAcvlemZrWK0oPA3ZBSN0IHl8d7gGlihtYuSKk78QOdoAhRRFH3M5iCXxdFN-KENpX8NdJwm0Q"&lt;br /&gt;        type="text/javascript"&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;function initialize() {&lt;br /&gt;  if (GBrowserIsCompatible()) {&lt;br /&gt;&lt;br /&gt;    // Set up the copyright information&lt;br /&gt;    // Each image used should indicate its copyright permissions&lt;br /&gt;    var myCopyright = new GCopyrightCollection("(c) ");&lt;br /&gt;    myCopyright.addCopyright(new GCopyright('Demo',&lt;br /&gt;      new GLatLngBounds(new GLatLng(-90,-180),&lt;br /&gt;new GLatLng(90,180)), 0,'?2007 Google'));&lt;br /&gt;&lt;br /&gt;    // Create the tile layer overlay and&lt;br /&gt;    // implement the three abstract methods&lt;br /&gt;    var tilelayer = new GTileLayer(myCopyright);&lt;br /&gt;&lt;br /&gt;    tilelayer.getTileUrl = function(tile, zoom) {&lt;br /&gt;    var req=null;&lt;br /&gt;    req = "&lt;span style="font-weight: bold;"&gt;http://stadb32.us.oracle.com:7001/mapviewer/mcserver&lt;/span&gt;?" +&lt;br /&gt;          "request=gettile&amp;amp;format=PNG&amp;amp;"+&lt;br /&gt;       "zoomlevel="+(zoom)+"&amp;amp;mapcache=&lt;span style="font-weight: bold;"&gt;mvdemo.demo_map_3785&lt;/span&gt;&amp;amp;mx="&lt;br /&gt;       +(tile.x)+"&amp;amp;my="+(Math.pow(2,zoom)-1-tile.y)+"&amp;amp;";&lt;br /&gt;        return req;};&lt;br /&gt;&lt;br /&gt;    tilelayer.isPng = function() { return true;};&lt;br /&gt;    tilelayer.getOpacity = function() { return 0.75; }&lt;br /&gt;&lt;br /&gt;    var myTileLayer = new GTileLayerOverlay(tilelayer);&lt;br /&gt;    var map = new GMap2(document.getElementById("map_canvas"));&lt;br /&gt;    map.setCenter(new GLatLng(33.4419, -90.1419), 4);&lt;br /&gt;    map.addControl(new GSmallMapControl());&lt;br /&gt;    map.addOverlay(myTileLayer);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body onload="initialize()" onunload="GUnload()"&gt;&lt;br /&gt;&amp;lt;div id="map_canvas" style="width: 800px; height: 600px"&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;The relevant (modified) code is the getTileUrl function. Google Maps passes in the tile coordinates for the requested tile and the current zoom level. The parameter “tile” is a GPoint object with “x” and “y” attributes. So tile.x is the x-coordinate for the tile. This is same for Oracle Maps since it also goes from left to right. The y-coordinate value however needs to be recomputed since Google’s Y values increase top to bottom while Oracle’s increase bottom to top. In both cases there are 2&lt;sup&gt;N&lt;/sup&gt;x2&lt;sup&gt;N&lt;/sup&gt; tiles at zoom level N. So the Y value for the Oracle Maps tile will be (2&lt;sup&gt;N&lt;/sup&gt; –1 – tile.y).&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;You should modify the Google Maps key as well as the MapViewer server URL in the above code. Save the code as tileoverlay-simple.html, then open it from a browser, and you should see a Google Maps map with the MapViewer tile layer overlay.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/SbVdwz63F7I/AAAAAAAAAFw/Agf-TrVU0XM/s1600-h/tile-overlay.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_vMku6FYL_58/SbVdwz63F7I/AAAAAAAAAFw/Agf-TrVU0XM/s320/tile-overlay.png" alt="" id="BLOGGER_PHOTO_ID_5311254428705560498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Final note, while this article presented how to display MapViewer tiles in a Google Maps mash-up application, the up-coming release of MapViewer (11g R1) will include built-in support for displaying Google Maps and Microsoft Virtual Earth tiles from within your Oracle Maps application.  A blog about such support will be posted here as soon as MapViewer 11g R1 is released (which hopefully is just around the corner).&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-5812965829880624314?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/5812965829880624314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=5812965829880624314' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5812965829880624314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5812965829880624314'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/03/displaying-mapviewer-tile-layers-over.html' title='Displaying MapViewer tile layers over Google Maps'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/SbVb6cUhRJI/AAAAAAAAAFo/NuOnQ04H16E/s72-c/tile-overlay-mv.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-3569467540007907550</id><published>2009-01-26T10:17:00.007-05:00</published><updated>2009-01-26T10:32:47.042-05:00</updated><title type='text'>Heat map support in MapViewer 11g</title><content type='html'>One of the many new features of Oracle MapViewer 11g (which is now in the final testing stage) is heat maps.  If you don't know what exactly is a heat map, it is a color based 2D representation of a point data set's distribution pattern. It is great at revealing clusters of points or events that occur in a study region.&lt;br /&gt;&lt;br /&gt;Here is a screen shot of such a heat map fully integrated with the Oracle Maps JavaScript API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vMku6FYL_58/SX3VFNAUmZI/AAAAAAAAAFI/-4Terh1mRkM/s1600-h/heatmap-cities.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 188px;" src="http://4.bp.blogspot.com/_vMku6FYL_58/SX3VFNAUmZI/AAAAAAAAAFI/-4Terh1mRkM/s320/heatmap-cities.png" alt="" id="BLOGGER_PHOTO_ID_5295623022224644498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The above map displays the CITIES table in MapViewer's MVDEMO data set as a heat map.  The color gradients (from white to green to orange and finally to red) shows the distribution pattern (clusters) of cities and towns of US.   In MapViewer terms, the CITIES theme is rendered using a HEAT MAP style.    Internal tests have shown MapViewer can easily generate a heat map from hundreds of thousands of points, on the fly.&lt;br /&gt;&lt;br /&gt;Here is another screen shot, this time showing the distribution of pizza restaurants across the states.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vMku6FYL_58/SX3WKAFcrgI/AAAAAAAAAFQ/lJMtj6olZVw/s1600-h/heatmap-pizza.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 258px;" src="http://4.bp.blogspot.com/_vMku6FYL_58/SX3WKAFcrgI/AAAAAAAAAFQ/lJMtj6olZVw/s320/heatmap-pizza.png" alt="" id="BLOGGER_PHOTO_ID_5295624204167458306" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-3569467540007907550?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/3569467540007907550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=3569467540007907550' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3569467540007907550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3569467540007907550'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/01/heat-map-support-in-mapviewer-11g.html' title='Heat map support in MapViewer 11g'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vMku6FYL_58/SX3VFNAUmZI/AAAAAAAAAFI/-4Terh1mRkM/s72-c/heatmap-cities.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-749786146925333498</id><published>2009-01-21T10:51:00.009-05:00</published><updated>2009-01-21T11:59:31.802-05:00</updated><title type='text'>Creating a separate MapViewer admin account</title><content type='html'>By default MapViewer borrows the same admin account that you use to log into the Application Server admin web page. For OracleAS 10.1.3.* this is typically the user named "oc4jadmin", and for WebLogic it's typically "weblogic".&lt;br /&gt;&lt;br /&gt;In some cases however you may want to create a separate admin account just for MapViewer,such as when you do not wish to give away the middleware's master admin account information.  Basically, this new account can only be used to log into MapViewer's admin page and perform all of its management tasks.  It cannot be used to log into the middleware's master admin web site (the /em URL for OracleAS 10.1.3.* or the /console URL for WebLogic Server).&lt;br /&gt;&lt;br /&gt;So how do you do that?  We will show you the steps for both OracleAS 10.1.3 and WebLogic Server 10.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oracle Application Server 10.1.3.*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets first assume you already have MapViewer deployed to one of the OC4J instances in your OracleAS 10.1.3.* installation.  If MapViewer is not deployed yet, you should go ahead and deploy it.&lt;br /&gt;&lt;br /&gt;Step 1.  Log onto App Server's admin web site (/em).&lt;br /&gt;Step 2. Find the OC4J instance that contains MapViewer. Then click on its Administration tab.&lt;br /&gt;Step 3. Find the Security - Security Providers row, then click the Go to Task icon. This is shown in the following screen shot.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vMku6FYL_58/SXdIz8IjzYI/AAAAAAAAAFA/WBlq9L80eLQ/s1600-h/ss1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 209px;" src="http://4.bp.blogspot.com/_vMku6FYL_58/SXdIz8IjzYI/AAAAAAAAAFA/WBlq9L80eLQ/s320/ss1.png" alt="" id="BLOGGER_PHOTO_ID_5293779944149863810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 4. Click the "Instance Level Security" button&lt;br /&gt;Step 5.  Select the Realms tab&lt;br /&gt;Step 6. Click the number in the Users column of the row  starting with "jazn.com".&lt;br /&gt;Step 7. Click the Create button.&lt;br /&gt;Step 8. Enter the user name and password for the new user to be created for MapViewer.  For example I entered &lt;span style="font-weight: bold;"&gt;mapadmin&lt;/span&gt; as the user name.&lt;br /&gt;Step 9. On the same page, from Available Roles, select and move "&lt;span style="font-weight: bold;"&gt;oc4j-app-administrators&lt;/span&gt;" to the Selected Roles box.  Click Ok. You should see a confirmation page showing the new user and its assigned roles (oc4j-app-administrators).&lt;br /&gt;&lt;br /&gt;The above steps create a new admin user for MapViewer with the assigned role of oc4j-app-administrators.  We now need to modify Mapviewer's deployment descriptor so that it will accept this role for administration purposes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modify MapViewer's deployment descriptor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before performing the following step, I typically shutdown the entire OracleAS instance; however it may also work if you just shut down the OC4J instance that contains MapViewer.&lt;br /&gt;&lt;br /&gt;Once the OC4J instance is down, edit the following MapViewer deployment descriptor file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;AS_HOME&lt;/span&gt;/j2ee/&lt;span style="font-weight: bold;"&gt;home&lt;/span&gt;/application-deployments/mapviewer/web/orion-web.xml&lt;br /&gt;&lt;br /&gt;where AS_HOME is the home directory of your OracleAS install.  If your MapViewer is NOT deployed to the "home" OC4J instance, then you will also need to replace "home" with the directory name of the actual OC4J instance containing MapViewer.  If your OC4J is named "mapper" for instance, then the direcorry is typically AS_HOME/j2ee/&lt;span style="font-weight: bold;"&gt;oc4j_mapper&lt;/span&gt;/...&lt;br /&gt;&lt;br /&gt;Once the orion-web.xml file is opened in an editor,  locate the XML element &amp;lt;security-role-mapping name="map_admin_role"&gt;.  Add a new child &amp;lt;group&gt; element&lt;br /&gt;&amp;lt;group name="oc4j-app-administrators"&gt;.  In other words, the entire &lt;security-role-mapping&gt; element should look like this:&lt;br /&gt;&lt;br /&gt;   &amp;lt;security-role-mapping name="map_admin_role"&gt;&lt;br /&gt;      &lt;span style="font-weight: bold;"&gt;&amp;lt;group name="oc4j-app-administrators"/&gt;&lt;/span&gt;&lt;br /&gt;      &amp;lt;group name="oc4j-administrators"/&gt;&lt;br /&gt;      &amp;lt;group name="administrators"/&gt;&lt;br /&gt;   &amp;lt;/security-role-mapping&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You may also find another tag &amp;lt;security-role-mapping name="secure_maps_role"&gt; in the same file, leave that one alone (it is used for the secure mapping demos).&lt;br /&gt;&lt;br /&gt;By making the above change, we are telling MapViewer that any App Server user with the role "oc4j-app-administrators" should also be considered a MapViewer admin user.&lt;br /&gt;&lt;br /&gt;Save the file. And restart OC4J or OracleAS instance.&lt;br /&gt;&lt;br /&gt;Now you should be able to log into MapViewer's admin page using the newly created user (mapadmin in my case).  All the admin tasks of MapViewer should go through as usual.  You will not be able to log into the App Server admin site (/em) using mapadmin.   You can however, still log into MapViewer's admin page using the oc4jadmin account (after all it is the master admin for the entire OracleAS instance).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WebLogic Server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To be added later...&lt;br /&gt;&lt;br /&gt;&lt;/security-role-mapping&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-749786146925333498?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/749786146925333498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=749786146925333498' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/749786146925333498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/749786146925333498'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2009/01/creating-separate-mapviewer-admin.html' title='Creating a separate MapViewer admin account'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vMku6FYL_58/SXdIz8IjzYI/AAAAAAAAAFA/WBlq9L80eLQ/s72-c/ss1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-2147365445921522359</id><published>2008-11-24T13:58:00.002-05:00</published><updated>2008-11-24T14:01:47.480-05:00</updated><title type='text'>Official MapViewer white paper: a primer</title><content type='html'>Just FYI the official MapViewer Primer article can be found here:&lt;br /&gt;&lt;br /&gt;http://www.oracle.com/technology/products/mapviewer/mapviewer_training_index.html&lt;br /&gt;&lt;br /&gt;It provides a good and concise introduction on MapViewer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-2147365445921522359?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/2147365445921522359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=2147365445921522359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2147365445921522359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/2147365445921522359'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/11/official-mapviewer-white-paper-primer.html' title='Official MapViewer white paper: a primer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-7131540419289686534</id><published>2008-11-19T11:16:00.017-05:00</published><updated>2008-11-21T10:07:33.684-05:00</updated><title type='text'>Creating a web map from raster image files</title><content type='html'>This article outlines the steps needed to create a "slippy" web map from a set of raster image files on your disk. The main steps are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;load the image files into Oracle Spatial and store them as a GeoRaster table&lt;/li&gt;&lt;br /&gt;&lt;li&gt;create a MapViewer theme and base map for the GeoRaster table&lt;/li&gt;&lt;br /&gt;&lt;li&gt;create a MapViewer map tile layer so that the AJAX mapping client can display the data as a slippy map in the browser&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Lets now go through these steps with a bit more detail.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Loading image files into Oracle Spatial&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For this we will use the Map Builder tool. If you don't have the latest version of Map Builder, you can get it from OTN MapViewer page. The latest kit is MapViewer version 10.1.3.3 for WebLogic.&lt;br /&gt;&lt;br /&gt;Fire up Map Builder, then go to Tools &gt; Import Image. You will be prompted to enter the name for a GeoRaster table to be created (if you are importing an image for the first time), and a few other things including the raster data table name and georaster column name. You should jot down these names as you will need to enter them again when importing a second image and so forth.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/SSQ-6MFX1mI/AAAAAAAAACw/1_HLRsWLWxM/s1600-h/importimg1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270406633327416930" style="margin: 0px auto 10px; display: block; width: 320px; cursor: pointer; height: 241px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_vMku6FYL_58/SSQ-6MFX1mI/AAAAAAAAACw/1_HLRsWLWxM/s320/importimg1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Click Next. You can accept default values for all the fields. Note that the SRID for the georaster data is set to 999999 by default, you should change it if you know the exact Oracle SRID for the image files you are importing. If you do not know the SRID, you should set it to 262148 here. SRID 262148 is a meter-based local coordinate system, and will ensure you can create a tile layer in the last step. Note that you can always update it later to a more accurate SRID.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_vMku6FYL_58/SSQ_-8Dtu9I/AAAAAAAAAC4/Gd4rM9sAoNU/s1600-h/importimg2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270407814436469714" style="margin: 0px auto 10px; display: block; width: 320px; height: 238px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_vMku6FYL_58/SSQ_-8Dtu9I/AAAAAAAAAC4/Gd4rM9sAoNU/s320/importimg2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Click Next. Then click Finish. Map Builder will start uploading the image file to the database. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vMku6FYL_58/SSRAhzKA5jI/AAAAAAAAADA/zehcLIyblAo/s1600-h/importimg3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270408413342393906" style="margin: 0px auto 10px; display: block; width: 320px; height: 243px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_vMku6FYL_58/SSRAhzKA5jI/AAAAAAAAADA/zehcLIyblAo/s320/importimg3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After the image is uploaded and stored in the GeoRaster table, Map Builder will automatically prompt you to create a GeoRaster theme based on the table. A GeoRaster theme is required by MapViewer to visualize your image data. So click Next if this is the first image you just uploaded and there is no GeoRaster theme exists for it. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vMku6FYL_58/SSRBVFaDchI/AAAAAAAAADI/layRYJt70cw/s1600-h/importimg4.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270409294414836242" style="margin: 0px auto 10px; display: block; width: 320px; height: 241px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_vMku6FYL_58/SSRBVFaDchI/AAAAAAAAADI/layRYJt70cw/s320/importimg4.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Enter a name for your new GeoRaster theme, then click Next. Click Next also on the 2nd and 3rd screen of this dialog. Then click Finish. You now have a GeoRaster theme for the image you just uploaded. You can preview this theme in Map Builder to ensure everything so far is working (in other words, you should see your image which is now stored in the database).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_vMku6FYL_58/SSRCiXYK9uI/AAAAAAAAADY/LBOV8tMpRmA/s1600-h/importimg7.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270410622088705762" style="margin: 0px auto 10px; display: block; width: 320px; height: 244px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_vMku6FYL_58/SSRCiXYK9uI/AAAAAAAAADY/LBOV8tMpRmA/s320/importimg7.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you have more than one image files, just repeat the above steps. Note that you should use the same GeoRaster table name, column name and Raster Data Table name for all subsequent image files. This will ensure that all the image files are stored in the same GeoRaster table in Oracle Spatial. It will also make sure Map Viewer automatically "stitch" your image files when visualizing them. After finishing uploading each image file, MapBuilder will prompt again and ask if you want to create a GeoRaster theme. Click Cancel here since you already created the theme, which will automatically see new image data added to the GeoRaster table.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Creating a MapViewer base map&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now that all of your image files are stored neatly as a GeoRaster table in Oracle Spatial, and MapViewer is (partially) happy because you created a theme based on that table, there remains two more steps for the data to be displayable in a "slippy" map in your browser. First, we need to create a MapViewer Base map that includes/references this theme. Second we need to create a map tile layer which is what the slippy mapping client is expecting.&lt;/p&gt;&lt;p&gt;To create a base map, we will again use Map Builder. Right click on the Base Maps node in the left panel of Map Builder. In the ensuing dialog, enter a name for the new base map. Click Next. In the second screen as shown below, find and select the theme we just created, and click the button with a "+" icon to add the theme to the new base map.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_vMku6FYL_58/SSRG-r9W6eI/AAAAAAAAADg/FLzseb-iWHg/s1600-h/importimg8.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270415506696235490" style="margin: 0px auto 10px; display: block; width: 320px; height: 242px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_vMku6FYL_58/SSRG-r9W6eI/AAAAAAAAADg/FLzseb-iWHg/s320/importimg8.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click Next and Finish. This will create a MapViewer base map that contains just the GeoRaster theme. Again you should be able to preview the base map inside Map Builder and see the same image data.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Creating a Map Tile Layer&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;The slippy Oracle Maps map cannot directly display a MapViewer base map for legacy reasons. It expects a MapViewer tile layer instead. So we need to create a map tile layer out of the base map. For this you will need to use the MapViewer Admin web page. So point your browser to the MapViewer home page, click the Admin icon/button, and login to the Admin page. Click the Management tab, then Manage Map Tile Layers. Click Create, select Internal. Click Continue. And you will see a web page that defines all aspects of the new Tile Layer, such as its name, what is the base map, and so forth. This is illustrated in the following screen shot:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vMku6FYL_58/SSRITemeDKI/AAAAAAAAADo/jN6_UqeNeXQ/s1600-h/importimg10.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5270416963399453858" style="margin: 0px auto 10px; display: block; width: 320px; height: 205px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_vMku6FYL_58/SSRITemeDKI/AAAAAAAAADo/jN6_UqeNeXQ/s320/importimg10.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that you will need to make sure proper values are entered for the fields Min X, Min Y, Max X, Max Y, Minimum Map Scale, Max Map Scale and SRID.  The fields Min X, Min Y, Max X and Max Y define the coordinates of an imaginary bounding box that covers all the imported images. You should be able to get these values by checking the coordinates in the TFW files. Or you can use Map Builder's preview feature to get a rough estimate since the preview panel displays the coordinate info too.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Min and Max Map Scale define the smallest and largest map scales that the map images should be displayed (or will display reasonablly well in terms of clarity).   They are true map scales and you can experiment with different values to get a sense of how they affect the user experience. A value of 1000 means the map scale is 1:1000, which in turn means a unit of distance (say an inch) on the screen represents 1000 same units (inches)  on the ground.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The other field, # Zoom Levels, defines how many steps to go from zoomed way out (Max Map Scale)  to way in (Min Map Scale).   Again, it is okay to experiment with all of these values in case you didnt get it all right the first time. It's not a big deal to delete the current one and start over with a new map tile layer.&lt;/p&gt;&lt;p&gt;Finally, the SRID field should contain the same SRID value you entered when importing images in Map Builder.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Testing your map&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;So how do you actually know if your map tile layer is created properly? You display it in a simple HTML page! The easiest way is to copy and modify one of the existing Oracle Maps tutorials (each tutorial is one very simple HTML/JavaScript page). Simply replace the map tile name with the one you just created, and set the proper map center point and zoom level for your data. Open the page in your browser and you should see a draggable slippy map showing your image data!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-7131540419289686534?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/7131540419289686534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=7131540419289686534' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7131540419289686534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7131540419289686534'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/11/creating-web-map-from-raster-image.html' title='Creating a web map from raster image files'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/SSQ-6MFX1mI/AAAAAAAAACw/1_HLRsWLWxM/s72-c/importimg1.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-7819674902718586475</id><published>2008-11-04T14:00:00.003-05:00</published><updated>2008-11-04T14:30:08.111-05:00</updated><title type='text'>draggable magnifying glass on your map</title><content type='html'>My colleague Ji Yang recently developed some neat code to implement a movable magnifying glass or "microscope" that reveals more details on any spot on the map, without zooming into the map itself.&lt;br /&gt;&lt;br /&gt;You can download the simple HTML page that implements this effect &lt;a href="http://www.ljqian.com/oraclemaps/magnifying_glass.html "&gt;here&lt;/a&gt;. And &lt;a href="http://www.ljqian.com/oraclemaps/magnifying_glass.png"&gt;here &lt;/a&gt;is the icon referenced in the page.  The demo works off the sample MVDEMO data set.&lt;br /&gt;&lt;br /&gt;The code simply uses the MVMapDecoration and other standard Oracle Maps JavaScript API. The basic idea is to create a duplicate set of MVMapView handle and theme-based FOI layers for the DIV container that serves as the microscope window. Then add this window as a movable Map Decoration object to the main map.  The map and themes in the microscope window show things at a different zoom level from the main map to achieve the "amplifying" effect.&lt;br /&gt;&lt;br /&gt;Anyway, here is a quick screen shot with the magnifying glass spotlighting on two different locations on the same map.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vMku6FYL_58/SRCh3Tc9nlI/AAAAAAAAACo/R2G6tPpowUs/s1600-h/microscope.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 110px;" src="http://1.bp.blogspot.com/_vMku6FYL_58/SRCh3Tc9nlI/AAAAAAAAACo/R2G6tPpowUs/s320/microscope.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5264885935882739282" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-7819674902718586475?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/7819674902718586475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=7819674902718586475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7819674902718586475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7819674902718586475'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/11/draggable-magnifying-glass-on-your-map.html' title='draggable magnifying glass on your map'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vMku6FYL_58/SRCh3Tc9nlI/AAAAAAAAACo/R2G6tPpowUs/s72-c/microscope.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-3171147863143478216</id><published>2008-10-29T14:43:00.009-04:00</published><updated>2008-10-29T15:38:17.270-04:00</updated><title type='text'>Generating map legends</title><content type='html'>In this article we will show at least 3 different ways of generating a map legend. The first two are based on MapViewer's XML API, while the 3rd one is pure HTML and  the most flexible.  All the examples have been tested against the sample MVDEMO data source.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Approach 1: manually specifying legend entries&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this approach, we create a map legend image by specifying a map legend element in MapViewer's XML request. Inside the element, we add one legend entry for each style to be displayed as well as some description text. The trick here is to leave MapViewer nothing else to render: no center point, no map bounding box, and no base map or themes either. When MapViewer sees such an otherwise empty map request, it will know to generate an image that is just big enough to contain all the legend entries.&lt;br /&gt;&lt;br /&gt;The following is one such sample XML request.&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="yes"?&gt;&lt;br /&gt;&amp;lt;map_request  datasource="mvdemo" format="PNG_STREAM"&gt;&lt;br /&gt;  &amp;lt;legend bgstyle="fill:#ffffff;stroke:#ff0000" profile="MEDIUM" position="SOUTH_EAST"&gt;&lt;br /&gt;          &amp;lt;column&gt;&lt;br /&gt;            &amp;lt;entry text="Map Legend" is_title="true" /&gt;&lt;br /&gt;            &amp;lt;entry style="M.STAR" text="center point" /&gt;&lt;br /&gt;            &amp;lt;entry style="M.CITY HALL 3" text="cities" /&gt;&lt;br /&gt;            &amp;lt;entry style="M.CITY HALL 4" text="big cities" /&gt;&lt;br /&gt;            &amp;lt;entry style="C.ROSY BROWN STROKE" text="state boundary" /&gt;&lt;br /&gt;            &amp;lt;entry style="L.PH" text="interstate highway" /&gt;&lt;br /&gt;   &amp;lt;entry style="L.FERRY" text="ferry" /&gt;&lt;br /&gt;            &amp;lt;entry is_separator="true" /&gt;&lt;br /&gt;            &amp;lt;entry text="County population:" /&gt;&lt;br /&gt;            &amp;lt;entry style="V.COUNTY_POP_DENSITY" tab="1" /&gt;&lt;br /&gt;          &amp;lt;/column&gt;&lt;br /&gt;  &amp;lt;/legend&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/map_request&gt;&lt;br /&gt;&lt;br /&gt;The above request results the following legend image:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_vMku6FYL_58/SQizTJDJ-DI/AAAAAAAAACQ/52CazbggPAM/s1600-h/legend1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 176px; height: 320px;" src="http://4.bp.blogspot.com/_vMku6FYL_58/SQizTJDJ-DI/AAAAAAAAACQ/52CazbggPAM/s320/legend1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5262653306010466354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Approach 2: Fully automatic embedded map legend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this approach, we want to display a map legend as part of the map itself, while without specifying any legend entries. Lets look at the such a map request:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="yes"?&gt;&lt;br /&gt;&amp;lt;map_request&lt;br /&gt;             title="Oracle LBS MAP"&lt;br /&gt;             basemap="demo_map"&lt;br /&gt;             datasource = "mvdemo"&lt;br /&gt;             width="640"&lt;br /&gt;             height="480"&lt;br /&gt;             bgcolor="#a6cae0"&lt;br /&gt;             antialiase="false"&lt;br /&gt;             format="PNG_STREAM"&gt;&lt;br /&gt;  &amp;lt;center size="0.15"&gt;&lt;br /&gt;     &amp;lt;geoFeature render_style="m.star"&lt;br /&gt;                       radius="1600,4800"&lt;br /&gt;                        label="A Place"&lt;br /&gt;                   text_style="t.Street Name" &gt;&lt;br /&gt;         &amp;lt;geometricProperty typeName="center"&gt;&lt;br /&gt;             &amp;lt;Point srsName="SDO:8307"&gt;&lt;br /&gt;                 &amp;lt;coordinates&gt;-122.2615, 37.5266&amp;lt;/coordinates&gt;&lt;br /&gt;             &amp;lt;/Point&gt;&lt;br /&gt;         &amp;lt;/geometricProperty&gt;&lt;br /&gt;     &amp;lt;/geoFeature&gt;&lt;br /&gt;  &amp;lt;/center&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;legend bgstyle="fill:#ffffff;stroke:#ff0000" profile="MEDIUM" position="SOUTH_EAST"&gt;&lt;br /&gt;  &amp;lt;/legend&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/map_request&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the above request specifies a legend element without any actual legend entries inside it. So how will MapViewer create the legend in this case? It actually will look up all the themes that are visible on the result map, and displays all the styles that are used by these themes in the legend area. This is great if you are just feeling lazy and would rather MapViewer handle everything for you.  The following is the map with the automatic legend:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vMku6FYL_58/SQi0SVHvpUI/AAAAAAAAACY/IKY2lhGAPhg/s1600-h/legend2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 242px;" src="http://3.bp.blogspot.com/_vMku6FYL_58/SQi0SVHvpUI/AAAAAAAAACY/IKY2lhGAPhg/s320/legend2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5262654391582696770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For more information about these two approaches and the (sometimes limited) customization options, please check out MapViewer's User Guide.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Approach 3: Full manual mode&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are an advanced user, you most likely will want more than the two approaches we just mentioned. No worries. In the 3rd approach, we will leverage a new MapViewer request to achieve complete control of legend customization and layout. Basically, with a recent MapViewer release (such as 10.1.3.3 for WebLogic), you can now request a 'sample' image of any style from Mapviewer. A typical request URL for a style image looks like this:&lt;br /&gt;&lt;br /&gt;http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=M.STAR&amp;w=25&amp;h=25&amp;ds=mvdemo&lt;br /&gt;&lt;br /&gt;For the above URL, MapViewer will generate and stream back an image 25 pixels wide and high that shows the style named "M.STAR" from the "mvdemo" data source.  &lt;br /&gt;&lt;br /&gt;With this kind of style image URL, we can use the regular HTML table and &amp;lt;img&gt; tags to fully customize what, where and how legend entries are displayed. For instance, to replicate the sample legend in Approach 1, we can use the following simple HTML table (you can also use CSS constructs to achieve much fancier layout if you so desire):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;TABLE&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt; &lt;br /&gt;    &amp;lt;Font size="+1" color="blue"&gt;Basic Features:&amp;lt;/FONT&gt;&lt;br /&gt;  &amp;lt;/TD&gt; &lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=M.STAR&amp;w=25&amp;h=25&amp;ds=elocation"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;      map center &lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=M.CITY+HALL+3&amp;w=25&amp;h=25&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     cities&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=M.CITY+HALL+4&amp;w=25&amp;h=25&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     big cities&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=C.ROSY+BROWN+STROKE&amp;w=34&amp;h=34&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     state boundary&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=L.PH&amp;w=45&amp;h=15&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     interstate highway&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=L.FERRY&amp;w=45&amp;h=15&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     ferry&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;  &amp;lt;!-- a separator --&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/myicons/t.gif" height="15" width="1"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;     &lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD colspan="2"&gt;&lt;br /&gt;     &amp;lt;FONT size="+1" color="blue"&gt;County Population Density:&amp;lt;/FONT&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;TR&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;    &amp;lt;img src="http://sdolnx2.us.oracle.com:7777/mapviewer/omserver?sty=V.COUNTY_POP_DENSITY&amp;w=180&amp;h=175&amp;ds=mvdemo"&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;  &amp;lt;TD&gt;&lt;br /&gt;  &amp;lt;/TD&gt;&lt;br /&gt;&amp;lt;/TR&gt;&lt;br /&gt;&amp;lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;The following is what you will see in a browser:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vMku6FYL_58/SQi3NKGwVvI/AAAAAAAAACg/HZ_ekpj312s/s1600-h/custom_legend.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 258px; height: 320px;" src="http://3.bp.blogspot.com/_vMku6FYL_58/SQi3NKGwVvI/AAAAAAAAACg/HZ_ekpj312s/s320/custom_legend.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5262657601261295346" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-3171147863143478216?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/3171147863143478216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=3171147863143478216' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3171147863143478216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3171147863143478216'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/10/generating-map-legends.html' title='Generating map legends'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vMku6FYL_58/SQizTJDJ-DI/AAAAAAAAACQ/52CazbggPAM/s72-c/legend1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4273342851390599081</id><published>2008-10-21T14:23:00.003-04:00</published><updated>2008-10-21T14:31:12.839-04:00</updated><title type='text'>MapViewer for WebLogic kit updated</title><content type='html'>The latest MapViewer release, version 10.1.3.3 for WebLogic, just saw an update yesterday. Please go to http://www.oracle.com/technology/software/products/mapviewer/index.html for immediate download.&lt;br /&gt;&lt;br /&gt;This kit is released under the same bundle name (mapviewer10133wls.zip) but the MapViewer component (mapviewer.ear) in it has been updated to include a few last minute bug fixes. If you have experienced issues with Oracle Maps when doing very fast zooming operations, such as FOI features throwing errors or base map tiles disappearing, then you want to download and deploy this latest kit.&lt;br /&gt;&lt;br /&gt;Note again that while this kit is certified on WebLogic Servers, you can also deploy it to all 10.1.3.* versions of OC4J standalone and Oracle App Server.  This kit also supersedes all previously released MapViewer 11g previews in functionality and stability.&lt;br /&gt;&lt;br /&gt;thanks&lt;br /&gt;&lt;br /&gt;LJ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4273342851390599081?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4273342851390599081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4273342851390599081' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4273342851390599081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4273342851390599081'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/10/mapviewer-or-weblogic-kit-updated.html' title='MapViewer for WebLogic kit updated'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4570253308424190052</id><published>2008-10-06T15:38:00.008-04:00</published><updated>2009-02-27T15:20:12.057-05:00</updated><title type='text'>Displaying labels on your FOI objects</title><content type='html'>You probably noticed that by default, none of the clickable Feature of Interest objects displayed on your map has any label text on it.  So how to add labels to your FoIs? There are different approaches based on how your FOI objects are created, and also their geometric types.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adding an index label to your markers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If your theme-based FOI layer is composed of exclusively Point-type objects (markers), you have an option to automatically attach a sequence number or letter to each marker displayed on the map.  This is very useful if all you want to do is to index each marker object and be able to cross-reference them in a list that shows the same objects in a tabular form. The method you will use is MVThemeBasedFOI.enableMarkerSequence(&lt;boolean&gt; enabled, &lt;string&gt; type).  Please check out the online API doc for details on this method.   The following screenshot shows how such a map looks like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_vMku6FYL_58/SOp-qTDRagI/AAAAAAAAACI/BGNdVBm1QuE/s1600-h/marker-index.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_vMku6FYL_58/SOp-qTDRagI/AAAAAAAAACI/BGNdVBm1QuE/s320/marker-index.png" alt="" id="BLOGGER_PHOTO_ID_5254151180414708226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that in order to make the index number or letter inside each marker visible, you need to make sure the Marker style used by your theme is big enough for the label. Also make sure the color of the text is set to a different color of the marker itself. In the above map, the theme uses a circle Marker style, and it is filled with red color. So you need to make sure it does not use a red color for its text. To change the text color (and font/size if needed), open the Marker style in Map Builder, click the Marker Text button and change the text color. This is shown in the following screen shot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_vMku6FYL_58/SOp9NiryI0I/AAAAAAAAACA/jaRiPKPyin8/s1600-h/marker-text-color.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_vMku6FYL_58/SOp9NiryI0I/AAAAAAAAACA/jaRiPKPyin8/s320/marker-text-color.png" alt="" id="BLOGGER_PHOTO_ID_5254149586883322690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Individual marker FOI objects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you manually create and place individual FOI objects on the map, for instance by using the MVFOI.createMarkerFOI() and mapview.addFOI() methods, then it is very easy to add label text to each marker. It is shown in the built-in Oracle Maps tutorial mapviewer/fsmc/tutorial/samples/FOIMarker.html.  Look for the statement containing setHTMLElement("#1",20,20), which is the exact method you will use to set a label on top of the marker you are creating.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Theme-based FOI layer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are displaying a pre-defined theme based FOI layer, and you want to display a label on each feature of interest, there is a method on MVThemeBasedFOI that does just that: enableLabels(true).  Note that this method will work provided the following conditions are met:&lt;br /&gt;  1. The theme has label enabled (in other words, if you submit this theme in a plain XML map request the resulted map image should display labels on your theme).&lt;br /&gt;  2. The features are of polygon type.  If your FOIs are of linestring or point type, the method enableLabels() does nothing for you, unless you enable whole-image rendering for the FOI layer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dynamic theme based FOI layer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are displaying a JDBC/Dynamic theme based FOI layer, and want to display a label on each feature, simply call the same MVThemeBasedFOI.enableLabels(true) method on your FOI layer. You just need to make sure that your dynamic theme actually contains a label column in its SELECT list, and tell MapViewer the name of that label column as well as the labeling style to be used.  As an example, I modified the buffer theme in the built-in tutorial /mapviewer/fsmc/tutorial/samples/jdbcThemeBasedFOI.html to display the label "A1" on each buffer zone:&lt;br /&gt;&lt;br /&gt;function updateBuffer()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;baseQuery = "select &lt;span style="font-weight: bold;"&gt;'A1' as label&lt;/span&gt;, sdo_geom.sdo_buffer(A.location, "+radius+&lt;br /&gt;               ", 0.005, 'unit=mile arc_tolerance=0.005') location "+&lt;br /&gt;               " from "+theme+" A" ;&lt;br /&gt;   var theme = '&amp;lt;themes&gt;&lt;theme name="JDBC_THEME"&gt;' +&lt;br /&gt;               '&amp;lt;jdbc_query asis="true" spatial_column="location" jdbc_srid="8307" ' +&lt;br /&gt;               'render_style="'+bufferStyle+'" datasource="mvdemo" &lt;span style="font-weight: bold;"&gt;label_column="label" label_style="T.CITY NAME"&lt;/span&gt; &gt;' + baseQuery +&lt;br /&gt;               '&amp;lt;/jdbc_query&gt;&amp;lt;/theme&gt;&amp;lt;/themes&gt;' ;&lt;br /&gt;   buffertheme = new MVThemeBasedFOI('buffertheme',theme);&lt;br /&gt;   buffertheme.setBringToTopOnMouseOver(true);&lt;br /&gt;   buffertheme.enableLabels(true);&lt;br /&gt;   mapview.addThemeBasedFOI(buffertheme);&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;}&lt;/theme&gt;&lt;/string&gt;&lt;/boolean&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4570253308424190052?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4570253308424190052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4570253308424190052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4570253308424190052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4570253308424190052'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/10/displaying-labels-on-your-foi-objects.html' title='Displaying labels on your FOI objects'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vMku6FYL_58/SOp-qTDRagI/AAAAAAAAACI/BGNdVBm1QuE/s72-c/marker-index.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-1071379613131496173</id><published>2008-09-30T16:40:00.010-04:00</published><updated>2008-10-02T09:33:15.645-04:00</updated><title type='text'>APEX, Oracle Maps and Secure Mapping</title><content type='html'>One interesting feature in the latest MapViewer kit (10.1.3.3 for WebLogic Server) is the built-in support for secure mapping. &lt;br /&gt;&lt;br /&gt;So what is it? Basically, it is a way for you to pass the name of an authenticated Web user to a database context where a theme's query will be executed. Your database session can then utilize this piece of information to filter or modify what the theme's query returns. As you probably already know, every MapViewer theme (pre-defined  or JDBC/dynamic) results in a SQL query being executed in the database. More specifically, MapViewer obtains a JDBC connection from the connection pool associated with a data source and executes the query in the session of that connection. &lt;br /&gt;&lt;br /&gt;Since it is a shared connection pool, how do you pass a web user's name to each theme's connection or DB session? The way MapViewer does it, is to always execute a 'before' and an 'after' PL/SQL procedure around the actual execution of the theme query.  In the 'before' PL/SQL procedure, MapViewer passes in the currently logged in Web user's name (or role, or any piece of info you desire). What the PL/SQL procedure does with this piece of information, is up to you, the author of this PL/SQL procedure. You could, for instance, set up some VPD policy or a view that filters the query result based on the web user name.  The 'after' procedure simply lets you do some clean-up if necessary.&lt;br /&gt;&lt;br /&gt;So where does MapViewer get this authenticated Web user in the first place? Typically it gets this piece of information from an authenticated J2EE session (that MapViewer can access with each and every incoming map request). Now, what happens if your user authenticates to APEX (Oracle Application Express), then communicates directly with the MapViewer server? In this case, there is no separate authentication with the J2EE server that MapViewer is running on, and the APEX authenticated user is not visible to the J2EE server (hence MapViewer). Don't worry, MapViewer also lets you pass an authenticated Web user's name through a Cookie. So in order to pass the APEX authenticated user's name to MapViewer, you simply setup a cookie within the APEX context so that this cookie accompanies every request going to MapViewer. &lt;br /&gt;&lt;br /&gt;So how do you tell MapViewer to pick up this web user name from a named cookie (instead of the default place which is a J2EE session)?  You do so by adding a few attributes to the MapViewer data source definition. In fact, you also mention the PL/SQL package name (containing the "before" and "after" procedures) in the same data source definition. Here is an example:&lt;br /&gt;&lt;br /&gt;&amp;lt;map_data_source name="mvdemo"&lt;br /&gt;                  jdbc_host="stadb32.us.oracle.com"&lt;br /&gt;                  jdbc_sid="mv"&lt;br /&gt;                  jdbc_port="25650"&lt;br /&gt;                  jdbc_user="mvdemo"&lt;br /&gt;                  jdbc_password="!mvdemo"&lt;br /&gt;                  jdbc_mode="thin"&lt;br /&gt;                  number_of_mappers="5"&lt;br /&gt;                  allow_jdbc_theme_based_foi="true"&lt;br /&gt;                  &lt;span style="font-weight:bold;"&gt;plsql_package="web_user_info"&lt;br /&gt;                  web_user_type="MON_USER"&lt;/span&gt;&lt;br /&gt;  /&gt;&lt;br /&gt;&lt;br /&gt;The first bold-typed attribute, &lt;span style="font-weight:bold;"&gt;plsql_package&lt;/span&gt;, tells MapViewer which database package it should execute around theme queries. The second bold attribute, &lt;span style="font-weight:bold;"&gt;web_user_type&lt;/span&gt;, tells MapViewer where to pick up the authenticated Web user name.&lt;br /&gt;The possible values for the web_user_type attribute are:&lt;br /&gt;  "&lt;span style="font-weight:bold;"&gt;J2EE_USER&lt;/span&gt;"  :  tells MapViewer to get the authenticated user name from a J2EE session&lt;br /&gt;  "&lt;span style="font-weight:bold;"&gt;OSSO_USER&lt;/span&gt;"  : tells MapViewer to get the authenticated user from an OSSO (Oracle Single Sign On) session&lt;br /&gt;  "&amp;lt;Cookie Name&gt;" : tells MapViewer to get the authenticated user from a cookie; cookie name is case insensitive.  In the above example, the name of the cookie containing the authenticated user name is "MON_USER".&lt;br /&gt;&lt;br /&gt;So that's the gist of it. For more detailed explaination on this new MapViewer feature, please check out the MapViewer User's Guide (section 1.8) that comes with MapViewer version 10.1.3.3 for WebLogic.  Note that this version of MapViewer works equally well with Oracle App Server 10g or standalone OC4J even though it says "for WebLogic Server".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A secure MVDEMO mapping demo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want to run an actual secure mapping demo based on the MVDEMO data set, you should check out &lt;a href="http://www.ljqian.com/oraclemaps/SecureMapRenderingDemo.pdf"&gt;this short article&lt;/a&gt; describing all the required steps and how to run the demo itself. Note this demo runs in a standalone OC4J or Oracle App Server environment, not in APEX, although you can make simple modifications so that it works in APEX or any other environment. Note also that you will need to use the MVDEMO data set that comes with the latest MapViewer kit mentioned above as it includes the necessary setup scripts for this demo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting up a cookie with user name in Apex&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My colleague Carsten Czarski sent me this tip in case you are wondering how to actually setup a cookie in Apex so that it contains the login user name. Basically your Set Username Cookie process in Apex login page 101 should look like this:&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;  owa_util.mime_header('text/html', FALSE);&lt;br /&gt;  owa_cookie.send(&lt;br /&gt;    name=&gt;'LOGIN_USERNAME_COOKIE',&lt;br /&gt;    value=&gt;lower(:P101_USERNAME));&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;  owa_cookie.send(&lt;br /&gt;    name =&gt; 'MON_USER',&lt;br /&gt;    value =&gt; :P101_USERNAME,&lt;br /&gt;    path =&gt; '/mapviewer',&lt;br /&gt;    domain =&gt; 'myhost.com');&lt;br /&gt;&lt;/span&gt;  exception when others then null;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;The above bold text creates a cookie named MON_USER in the current Apex session. This cookie will be sent to MapViewer along with every map/FOI request. Note especially the pieces about path and domain as they are very important, without these the cookie MON_USER won't reach MapViewer since it is likely running on a different path and domain from APEX.&lt;br /&gt;&lt;br /&gt;Note also this will make sure the default LOGIN_USERNAME_COOKIE is still there (in case other pages of your APEX application depends on this cookie).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-1071379613131496173?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/1071379613131496173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=1071379613131496173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/1071379613131496173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/1071379613131496173'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/apex-oracle-maps-and-secure-mapping.html' title='APEX, Oracle Maps and Secure Mapping'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6941966179699517898</id><published>2008-09-29T10:43:00.003-04:00</published><updated>2008-09-29T11:04:29.857-04:00</updated><title type='text'>Displaying map tiles in your Java Swing app</title><content type='html'>Recently I was asked about how to display map tiles served by a remote MapViewer server in a Swing desktop application. I have since written a simple Swing application that does just that.  You can get the complete &lt;a href="http://www.ljqian.com/oraclemaps/SwingMapViewer.zip"&gt;source code here&lt;/a&gt;. The sample application connects directly to our hosted eLocation server (elocation.oracle.com) and displays an initial map of the continental USA. You can use &lt;span style="font-weight:bold;"&gt;double-click&lt;/span&gt; (or &lt;span style="font-weight:bold;"&gt;+&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;-&lt;/span&gt; keys) to zoom in/out, and the 4 arrow keys to navigate or pan the map. Here is a snapshot:&lt;br /&gt;&lt;br /&gt;    &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_vMku6FYL_58/SODrcHnfr9I/AAAAAAAAABw/XwEnQ6IeVAc/s1600-h/swing-tiles.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_vMku6FYL_58/SODrcHnfr9I/AAAAAAAAABw/XwEnQ6IeVAc/s320/swing-tiles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5251456033827565522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you download the source code bundle, you will find the following files (in various sub-directories):&lt;br /&gt;&lt;br /&gt;SwingMapViewer.jws  :  the Oracle JDeveloper workspace file. If you have the latest (11g tech preview 4) version of JDeveloper, you can just double click this file to open the entire project and compile/run this sample.  If you are using another Java IDE, simply make sure the mvclient.jar (described below) is in your project's class/library path.&lt;br /&gt;&lt;br /&gt;Main.java :  the main driver class. it asks for a few command-line params (such as where is your MapViewer instance and what map tile layer you want to display) and sets up the configuration for the rest of the application.&lt;br /&gt;&lt;br /&gt;MapConfig.java : this class configures the application for such things as MapViewer URL, map tile layer name, data source name, initial map display center and zoom level as well as SRID et al. By default it reads such info from the mapconfig.properties file so you just need to edit that file if you want to display your own map tiles.&lt;br /&gt;&lt;br /&gt;MapPanel.java : this class provides the display area in the form of a Java JPanel. It also registers a few listeners to handle events such as mouse click and key presses (for simple navigation).&lt;br /&gt;&lt;br /&gt;MapDelegate.java : this is the most important class. It uses the MapViewer Java bean API to communicate with the remote MapViewer instance in response to events from the MapPanel class. So all the actual display/zoom/pan actions are implemented in this class. In truth this class simply delegates everything to the MapViewer bean API (composed of a single class oracle.lbs.mapclient.MapViewer) which is doing all the heavy lifting.&lt;br /&gt;&lt;br /&gt;mvclient.jar : this is the Jar file containing the MapViewer Java bean API classes. Make sure it is on your project classpath.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6941966179699517898?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6941966179699517898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6941966179699517898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6941966179699517898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6941966179699517898'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/displaying-map-tiles-in-your-java-swing.html' title='Displaying map tiles in your Java Swing app'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vMku6FYL_58/SODrcHnfr9I/AAAAAAAAABw/XwEnQ6IeVAc/s72-c/swing-tiles.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8857438025818638591</id><published>2008-09-26T12:04:00.007-04:00</published><updated>2008-09-26T12:33:26.053-04:00</updated><title type='text'>Photos from Oracle Openworld</title><content type='html'>As promised, here are a few quick snapshots from this year's Openworld held at the Moscone Center in downtown San Francisco. It is one of the largest Oracle user conferences with over 40k attendees. The two Spatial/MapViewer booths received a steady flow of visitors and it was great meeting a lot of customers and partners!&lt;br /&gt;&lt;br /&gt;Billboards all over the conference area:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As usual, Oracle had to completely take over a few street blocks in order to have enough space for everyone to sit and meet :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/4.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A nice lunch area in the garden near Moscone center:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/5.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some indoor snapshots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/14.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/14.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/16.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/16.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/8.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wednesday we had a night of entertainment on the Treasure island:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/18.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/18.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This year there were 4 bands doing live music, Seal (my personal favorite), Elvis Costello, UB 40 and Allan Jackson.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/19.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.ljqian.com/oraclemaps/oow2008/oow2008-Images/19.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8857438025818638591?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8857438025818638591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8857438025818638591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8857438025818638591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8857438025818638591'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/photos-from-oracle-openworld.html' title='Photos from Oracle Openworld'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4664565531452172082</id><published>2008-09-24T19:25:00.002-04:00</published><updated>2008-09-24T19:33:44.656-04:00</updated><title type='text'>Latest MapViewer kit released</title><content type='html'>Just want to let you know that we posted the latest MapViewer kit for WebLogic server on OTN. Just go to otn.oracle.com then search for "MapViewer" and you will find the kit under the software section of the MapViewer page. &lt;br /&gt;&lt;br /&gt;This kit is identical to the previously released (but short-lived) 10g patch 5 kit. We want to emphasize the support for WebLogic server so that's why we pulled the patch 5 kit and re-packaged it as MapViewer 10.1.3.3 for WebLogic.  Note that even though it is "branded" as for WebLogic, it works just fine with your existing 10g versions of Oracle App Server or OC4J standalone.&lt;br /&gt;&lt;br /&gt;Note also that this kit contains all the features that were available in various MapViewer 11g preview kits. So if you are currently using MapViewer 11g preview, upgrade now to this latest official kit! &lt;br /&gt;&lt;br /&gt;Finally, I'm at the Oracle OpenWorld conference this week in San Francicso. This year we have two booths in the exhibition hall, one for Spatial and one for MapViewer!  Traffic has been steady and it was fun meeting a lot of MapViewer/Spatial users in person.  I hope to upload some conference photos later after I get back home.&lt;br /&gt;&lt;br /&gt;regards&lt;br /&gt;&lt;br /&gt;LJ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4664565531452172082?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4664565531452172082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4664565531452172082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4664565531452172082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4664565531452172082'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/latest-mapviewer-kit-released.html' title='Latest MapViewer kit released'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-5272923943184468793</id><published>2008-09-19T16:18:00.001-04:00</published><updated>2008-09-19T16:20:56.300-04:00</updated><title type='text'>Oracle MapViewer: a primer</title><content type='html'>I just finished up a primer article introducing basic concepts and setups of MapViewer. Feel free to check it out &lt;a href="http://www.ljqian.com/oraclemaps/OracleMapViewerPrimer.pdf"&gt;here&lt;/a&gt;. Hope it helps people that are new to MapViewer; it even includes a mini introduction to Oracle Spatial!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-5272923943184468793?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/5272923943184468793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=5272923943184468793' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5272923943184468793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/5272923943184468793'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/oracle-mapviewer-primer.html' title='Oracle MapViewer: a primer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8059619018809074547</id><published>2008-09-18T15:38:00.002-04:00</published><updated>2008-09-18T15:40:45.993-04:00</updated><title type='text'>World mercator projection used by Oracle's eLocation site</title><content type='html'>&lt;p&gt;World Mercator (srid 54004) is a projection coordinate system widely used by  tile based online mapping services. Map tiles (elocation.world_map) served by  elocation.oracle.com are rendered in this coordinate system. However Oracle  Database products prior to version 11g R2 does not support this coordinate system out of  box. To add support for this coordinate system to your database, you need to  execute the following SQL statements when connect as a DBA user.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;   INSERT INTO sdo_coord_ops ( coord_op_id, coord_op_name,  coord_op_type,&lt;br /&gt;     source_srid, target_srid, coord_tfm_version,  coord_op_variant,&lt;br /&gt;     coord_op_method_id, UOM_ID_SOURCE_OFFSETS,  UOM_ID_TARGET_OFFSETS,&lt;br /&gt;     information_source, data_source, show_operation,  is_legacy,&lt;br /&gt;     legacy_code, reverse_op, is_implemented_forward,  is_implemented_reverse)&lt;br /&gt;   VALUES ( 54004, 'World Mercator', 'CONVERSION',  null, null, '', null,&lt;br /&gt;     9804, null, null, null, null, 1, 'FALSE', null, 1,  1, 1);&lt;/p&gt; &lt;p&gt;   insert into MDSYS.SDO_COORD_OP_PARAM_VALS (&lt;br /&gt;       COORD_OP_ID,  COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE,&lt;br /&gt;        PARAM_VALUE_FILE_REF, UOM_ID) VALUES (&lt;br /&gt;       54004, 9804, 8801, 0,&lt;br /&gt;        NULL, 9102);&lt;/p&gt; &lt;p&gt;   insert into MDSYS.SDO_COORD_OP_PARAM_VALS ( COORD_OP_ID,&lt;br /&gt;        COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE,&lt;br /&gt;        PARAM_VALUE_FILE_REF, UOM_ID) VALUES (&lt;br /&gt;       54004, 9804, 8802, 0, NULL,  9102);&lt;/p&gt; &lt;p&gt;   insert into MDSYS.SDO_COORD_OP_PARAM_VALS ( COORD_OP_ID,&lt;br /&gt;        COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE,&lt;br /&gt;        PARAM_VALUE_FILE_REF, UOM_ID) VALUES (&lt;br /&gt;       54004, 9804, 8805, 1, NULL,  9201);&lt;/p&gt; &lt;p&gt;   insert into MDSYS.SDO_COORD_OP_PARAM_VALS ( COORD_OP_ID,&lt;br /&gt;        COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE,&lt;br /&gt;        PARAM_VALUE_FILE_REF, UOM_ID) VALUES (&lt;br /&gt;       54004, 9804, 8806, 0, NULL,  9001);&lt;/p&gt; &lt;p&gt;   insert into MDSYS.SDO_COORD_OP_PARAM_VALS ( COORD_OP_ID,&lt;br /&gt;        COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE,&lt;br /&gt;        PARAM_VALUE_FILE_REF, UOM_ID) VALUES (&lt;br /&gt;       54004, 9804, 8807, 0, NULL,  9001);&lt;/p&gt; &lt;p&gt;   INSERT INTO sdo_coord_ref_system ( srid, coord_ref_sys_name,&lt;br /&gt;      coord_ref_sys_kind, coord_sys_id, datum_id, geog_crs_datum_id,&lt;br /&gt;      source_geog_srid, projection_conv_id, cmpd_horiz_srid, cmpd_vert_srid,&lt;br /&gt;      information_source, data_source, is_legacy, legacy_code, legacy_wktext,&lt;br /&gt;      legacy_cs_bounds, is_valid, supports_sdo_geometry) VALUES (&lt;br /&gt;     54004,  'World Mercator', 'PROJECTED', 4499, null, 6326, 4326, 54004,&lt;br /&gt;     Null,  Null, null, null, 'FALSE', null, null, null, 'TRUE', 'TRUE');&lt;/p&gt; &lt;p&gt;  COMMIT ; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8059619018809074547?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8059619018809074547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8059619018809074547' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8059619018809074547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8059619018809074547'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/world-mercator-projection-used-by.html' title='World mercator projection used by Oracle&apos;s eLocation site'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-6130898781314299262</id><published>2008-09-16T11:35:00.002-04:00</published><updated>2008-09-16T11:39:17.304-04:00</updated><title type='text'>How to read the logs generated by MapViewer</title><content type='html'>The log records generated by MapViewer at the server side are crucial when you need to diagnose any MapViewer issues.  A while ago I wrote a short piece trying to explain what the log records look like and how to interpret them. You can grab it &lt;a href="http://www.ljqian.com/oraclemaps/MapViewer-Logs.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For 11g we are also working on a web-based log viewer that can be accessed right from MapViewer's home page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-6130898781314299262?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/6130898781314299262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=6130898781314299262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6130898781314299262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/6130898781314299262'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/how-to-read-logs-generated-by-mapviewer.html' title='How to read the logs generated by MapViewer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4669035666824166175</id><published>2008-09-16T11:18:00.003-04:00</published><updated>2008-09-16T11:20:54.153-04:00</updated><title type='text'>Oracle Maps and APEX</title><content type='html'>I recently wrote a short white paper on how to integrate MapViewer/Oracle Maps with Oracle Applicatin Express, the quick and easy database application development environment. You can find the white paper &lt;a href="http://www.ljqian.com/oraclemaps/APEX_MapViewer_001.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4669035666824166175?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4669035666824166175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4669035666824166175' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4669035666824166175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4669035666824166175'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/oracle-maps-and-apex.html' title='Oracle Maps and APEX'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-517365554923013429</id><published>2008-09-12T15:08:00.003-04:00</published><updated>2008-09-12T15:21:01.866-04:00</updated><title type='text'>GeoRSS support in Oracle Maps</title><content type='html'>Starting with the latest Mapviewer kit (10g patch 5, a.k.a 10.1.3.3 for WebLogic), you can easily display an external GeoRSS feed as a FOI layer on top of your tile layer. In fact, your MapViewer installation comes with some GeoRSS tutorials, such as tutorial #58. Its full URL is http://&amp;lt;host&gt;:&amp;lt;port&gt;/mapviewer/fsmc/tutorial/samples/georss-demo.html.&lt;br /&gt;&lt;br /&gt;That page displays the United States continental states. Below the map you will see a text field where you can enter a custom URL to some external GeoRSS feed. If you want to see a feed that contains pictures (who doesn't!), you can try this Flickr photo stream feed:&lt;br /&gt;&lt;br /&gt;http://api.flickr.com/services/feeds/geo/?id=35468159852@N01&lt;br /&gt;&lt;br /&gt;(My colleague Jayant sent me this feed so you will have to ask him why this particular feed is chosen).&lt;br /&gt;&lt;br /&gt;You will see a map like this (after zooming into the San Francisco city area):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.ljqian.com/oraclemaps/img/georss.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 480px;" src="http://www.ljqian.com/oraclemaps/img/georss.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that if your MapViewer is running behind a firewall, you will need to setup the web proxy stuff in mapViewerConfig.xml (check the User's Guide on instructions).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-517365554923013429?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/517365554923013429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=517365554923013429' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/517365554923013429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/517365554923013429'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/georss-support-in-oracle-maps.html' title='GeoRSS support in Oracle Maps'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-3079199760104267241</id><published>2008-09-10T21:00:00.003-04:00</published><updated>2008-09-11T12:24:39.516-04:00</updated><title type='text'>Cross-domain Oracle Maps scripting</title><content type='html'>First, yes you can use Oracle Maps (the JavaScript/Ajax API) in a cross domain fashion.  In other words, the script in your application page can interact or connect to a remote MapViewer server that is on a different domain than where your application page originates from.&lt;br /&gt;&lt;br /&gt;Beware though you must be using the 10g Patch 4 (10.1.3.3 patch 4) or 10g Patch 5 (10.1.3.3 patch 5) versions of MapViewer. The original MapViewer production release (10.1.3.1) does not support cross-domain usage out of the box!&lt;br /&gt;&lt;br /&gt;Assuming you have the correct version of MapViewer server installed, here is how to do cross-site Oracle Maps scritping.  First let's assume your application page is accessed as http://www.fooA.com/myapp.html.  And the proper version of mapViewer server is accessed via http://www.fooB.com/mapviewer/.&lt;br /&gt;&lt;br /&gt;1. Always import the oraclemaps.js that comes from the correct MapViewer server. Do not use any cached or old copy of oraclemaps.js that is from an older version of MapViewer. You should copy the oraclemaps.js file from the mapviewer site and host it on your application page's web server, then import this library into your code.&lt;br /&gt;&lt;br /&gt;2. Specify the MapViewer server URL in your map tile layer and theme-based FOI layer constructor.&lt;br /&gt;This is the key. In order to interact with a MapViewer server that is running on&lt;br /&gt;a different domain from where your application page is hosted, you must explicitly&lt;br /&gt;specify the URL of the MapViewer tile server (for map tile layers) and FOI server (for&lt;br /&gt;theme-based FOI layers) in your code where you construct the tile layer or FOI&lt;br /&gt;layer. For example:&lt;br /&gt;&lt;br /&gt;mapview.addMapTileLayer(new MVMapTileLayer("mvdemo.demo_map",&lt;br /&gt; "http://www.fooB.com/mapviewer/mcserver"));&lt;br /&gt;&lt;br /&gt;var customers = new MVThemeBasedFOI('foitheme1','mvdemo.customers',&lt;br /&gt;'http://www.fooB.com/mapviewer/foi');&lt;br /&gt;&lt;br /&gt;And that's all you need to do!  For more info, check out the JSDoc for the MVMapTileLayer and&lt;br /&gt;MVThemeBasedFOI classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-3079199760104267241?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/3079199760104267241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=3079199760104267241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3079199760104267241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/3079199760104267241'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/cross-domain-oracle-maps-scripting.html' title='Cross-domain Oracle Maps scripting'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4868174523654907934</id><published>2008-09-10T20:01:00.008-04:00</published><updated>2008-09-10T21:12:09.323-04:00</updated><title type='text'>Getting more diagnostic info out of MapViewer</title><content type='html'>There are a few undocumented tricks that you can use to get more diagnostic info out of MapViewer.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;In-memory geometry cache status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One area is about the health or general status of the internal geometry cache. As you probably know MapViewer usually caches geometry data of pre-defined themes as they go through the rendering pipeline. The status (such as total bytes of data being cached) of this in-memory only geometry data cache can be obtained by adding a "report_stats" attribute to the  &amp;lt;spatial_data_cache&gt; tag of the mapViewerConfig.xml file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                       &amp;lt;spatial_data_cache   max_cache_size="64"                   &lt;br /&gt;                     &lt;span style="font-weight: bold;"&gt;report_stats="true"&lt;/span&gt;&lt;br /&gt;/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After restarting mapViewer, you will see periodic dumps of the in-memory geometry cache status in the MapViewer log file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;Connection pool status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you know mapViewer uses a JDBC connection pool for each data source. You can obtain information about these connection pools such as number of active connections. To do so, simply add an  element to the  &amp;lt;logging&gt; tag in mapViewerConfig.xml:&lt;br /&gt;&lt;br /&gt;&amp;lt;logging log_level="finest" log_thread_name="false"&lt;br /&gt;        log_time="true"&gt;&lt;br /&gt;  &amp;lt;log_output name="System.err" /&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- a file-based log stream. --&gt;&lt;br /&gt;  &amp;lt;log_output name="../log/mapviewer.log" /&gt;&lt;br /&gt;  &amp;lt;!-- dump datasource info every two minutes --&gt;&lt;br /&gt;  &amp;lt;&lt;span style="font-weight: bold;"&gt;monitor_data_sources value="true" interval="120"&lt;/span&gt; /&gt;&lt;br /&gt;&amp;lt;/logging&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After restarting Mapviewer, you will see a dump of the connection pool info for each data source every two minutes (120 seconds) in the log file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Usage of mappers and connections &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[Note: this trick only works with the 10g Patch 5 release of MapViewer]&lt;br /&gt;&lt;br /&gt;Sometimes you want to know if you have configured enough number of mappers for a particular data source, and/or if you have enough connections to serve your map requests. There is a simple XML request that you can send to a running MapViewer to find out.  You can send this request from a custom application of yours via standard HTTP Post, or simply use the built-in request forms that comes with your Mapviewer installation.&lt;br /&gt;&lt;br /&gt;To do so, point your browser to the MapViewer home page. Then click the Requests tab. In the big text area, clear out everything and paste the following xml request:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" standalone="yes"?&gt;&lt;br /&gt;&amp;lt;non_map_request&gt;&lt;br /&gt;&amp;lt;get_stats/&gt;&lt;br /&gt;&amp;lt;/non_map_request&gt;&lt;br /&gt;&lt;br /&gt;then click &lt;span style="font-weight: bold;"&gt;Submit&lt;/span&gt;. This will send MapViewer your request. The server will respond with a breakdown of the free/in-use mappers and connections for each defined data source, at the exact moment your request is receved!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;spatial_data_cache&gt;&lt;span style="font-weight: bold;"&gt;&lt;spatial_data_cache max_cache_size="64"&gt;&lt;monitor_data_sources&gt;&lt;logging&gt;&lt;logging log_level="finest" log_thread_name="false" log_time="true"&gt;&lt;log_output name="System.err"&gt;&lt;/log_output&gt;&lt;/logging&gt;&lt;/logging&gt;&lt;/monitor_data_sources&gt;&lt;/spatial_data_cache&gt;&lt;/span&gt;&lt;/spatial_data_cache&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4868174523654907934?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4868174523654907934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4868174523654907934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4868174523654907934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4868174523654907934'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/getting-more-diagnostic-info-out-of.html' title='Getting more diagnostic info out of MapViewer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-7709505629215737723</id><published>2008-09-10T17:00:00.002-04:00</published><updated>2008-09-10T17:08:51.917-04:00</updated><title type='text'>MapViewer 10g Patch 5 released</title><content type='html'>Grab it from OTN here:&lt;br /&gt;http://download.oracle.com/otn/other/mapviewer/mapviewer10133p5.zip&lt;br /&gt;&lt;br /&gt;This is the latest MapViewer release. It supersedes all (previously downloadable) 11g preview or early access kits. We are no longer allowed to post 11g preview kits on OTN per Oracle's new policy.&lt;br /&gt;&lt;br /&gt; The main things in this patch that worth mentioning are:&lt;br /&gt;1. Certified on WebLogic server version 9, 10 and 10.3 (preview);&lt;br /&gt;2. Works with Apple Safari desktop browser.&lt;br /&gt;3. And many bug fixes to the JavaScript API (and other areas of MapViewer also). Full fixed bug list is in the patch note.&lt;br /&gt;&lt;br /&gt;The patch note file is inside the zip file; the zip file itself is about 45 MB. &lt;br /&gt;&lt;br /&gt;The included User's Guide has detailed instructions on how to deploy this latest MapViewer on WebLogic Server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-7709505629215737723?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/7709505629215737723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=7709505629215737723' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7709505629215737723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/7709505629215737723'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/mapviewer-10g-patch-5-released.html' title='MapViewer 10g Patch 5 released'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-8878430906440608663</id><published>2008-09-02T14:15:00.002-04:00</published><updated>2008-09-02T14:21:57.421-04:00</updated><title type='text'>MapViewer web resources</title><content type='html'>The official web site for MapViewer (to get documentation, software et al)  is here:&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/mapviewer/index.html"&gt;http://www.oracle.com/technology/products/mapviewer/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The official discussion forum (shared with Oracle Spatial) is here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.oracle.com/forums/forum.jspa?forumID=76"&gt;http://forums.oracle.com/forums/forum.jspa?forumID=76&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Other Oracle MapViewer related blogs:&lt;br /&gt;&lt;br /&gt;A great blog by colleague &lt;span class="caption"&gt;Bernhard Fischer-Wasels:  &lt;/span&gt; &lt;a href="http://oracle-maps.blogspot.com/"&gt;http://oracle-maps.blogspot.com/&lt;/a&gt; (mostly in German).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-8878430906440608663?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/8878430906440608663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=8878430906440608663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8878430906440608663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/8878430906440608663'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/mapviewer-web-resources.html' title='MapViewer web resources'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-241110945500623842</id><published>2008-09-02T13:50:00.004-04:00</published><updated>2008-09-02T13:58:16.081-04:00</updated><title type='text'>eLocation: a public show case of MapViewer</title><content type='html'>Oracle's own online mapping server:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://elocation.oracle.com/elocation/ajax"&gt;http://elocation.oracle.com/elocation/ajax&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above is an online mapping site powered by Oracle's own GeoSpatial products such as Oracle Spatial and MapViewer.&lt;br /&gt;&lt;br /&gt;Specifically, the mapping is all done by MapViewer. It uses MapViewer's map tile server to generate and cache map tiles.  The map look and feel is created using the Map Builder desktop tool that is part of the MapViewer product.&lt;br /&gt;&lt;br /&gt;The geocoding and routing (driving directions) are powered by the GeoCoder and Router component of Oracle Spatial.&lt;br /&gt;&lt;br /&gt;Most of the data are purchased from Navteq. All the data are loaded into an Oracle database; this includes all the base map layers such as streets and boundaries/parks/lakes/POIs.&lt;br /&gt;&lt;br /&gt;Please be aware that this is an experimental site provided primarily for Oracle's internal use.  The site consists of 2 not-so-fast Linux boxes so please be gentle and understanding if it cannot keep up with your requests from time to time :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-241110945500623842?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/241110945500623842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=241110945500623842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/241110945500623842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/241110945500623842'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/elocation-public-show-case-of-mapviewer.html' title='eLocation: a public show case of MapViewer'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6774903665752106951.post-4912996150057496451</id><published>2008-09-02T13:15:00.003-04:00</published><updated>2008-09-02T17:14:50.822-04:00</updated><title type='text'>New Oracle MapViewer blog</title><content type='html'>Welcome to my blog on Oracle MapViewer.&lt;br /&gt;&lt;br /&gt;My name is Liujian (LJ) Qian and I'm the development manager of the MapViewer product.&lt;br /&gt;&lt;br /&gt;Now, a brief introduction on MapViewer.&lt;br /&gt;&lt;br /&gt;MapViewer is a web mapping product designed to work with Oracle's Spatial database technologies. It is a middle-tier component that runs inside Oracle's middleware, such as the WebLogic server.  You can however deploy MapViewer to other J2EE containers such as JBoss or Tomcat.&lt;br /&gt;&lt;br /&gt;We are currently finishing up the next major release of MapViewer which is 11g.  As usual it will be released as part of Oracle's Fusion Middleware 11g product, which is currently scheduled for first half of CY 2009.&lt;br /&gt;&lt;br /&gt;We are also preparing a new 10g patch for MapViewer which will be available through metalink and OTN.&lt;br /&gt;&lt;br /&gt;On the backend, MapViewer connects to one or more Oracle databases where your spatial data are managed. On the frontend, MapViewer provides a comprehensive JavaScript/AJAX mapping API. MapViewer also provides Java and XML APIs.  Inside each MapViewer middletire process there is a core rendering engine, a map tile server and a Feature of Interest (FOI) server.&lt;br /&gt;&lt;br /&gt;So what distinguishes MapViewer from other online mapping server products? Here are a few that come to mind:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQL query driven data layers. A map produced by MapViewer may contain many layers (themes), and each theme is based on a SQL query.  MapViewer places no restriction on what kind of query you can have. As long as the query returns spatial data (with or without regular attribute data), MapViewer will treat it as a valid theme and display it.&lt;/li&gt;&lt;li&gt;Full support of Oracle Spatial database technologies:  advanced spatial data models such as Topology, Network Data Model, GeoRaster.  Full support of the concept of Workspace (for long transactions), Partitioning, as well as RAC (Real Application Cluster) and Label based security et al.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A powerful desktop map authoring tool called Map Builder. Map Builder is a Java desktop application.  You use it to connect to a database schema and it will discover all the spatial data stored in there. You can then create base maps, themes and rendering styles that suit your business mapping needs.  Definitions of such metadata (including styles themselves) are all stored in the database and shared among all MapBuilder and MapViewer instances that connect to the same database schema.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A very capable Web2.0 JavaScript mapping API that provides interactive draggable map as well as Feature of Interest (FOI) layers that are fully clickable with customizable info window.&lt;/li&gt;&lt;li&gt;Full integration with many other Oracle products, such as BIEE and Oracle Apps.  A native application development wizard is also being built right inside Oracle JDeveloper 11g.&lt;/li&gt;&lt;li&gt;Takes full advantage of Oracle Middleware features, such as WebLogic's clustering and management functions.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6774903665752106951-4912996150057496451?l=oraclemaps.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oraclemaps.blogspot.com/feeds/4912996150057496451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6774903665752106951&amp;postID=4912996150057496451' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4912996150057496451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6774903665752106951/posts/default/4912996150057496451'/><link rel='alternate' type='text/html' href='http://oraclemaps.blogspot.com/2008/09/new-oracle-mapviewer-blog.html' title='New Oracle MapViewer blog'/><author><name>LJ</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='5' src='http://2.bp.blogspot.com/_vMku6FYL_58/SL2gF1mPfzI/AAAAAAAAABY/BXwNboorWlo/S220/orcl_logo_test.gif'/></author><thr:total>1</thr:total></entry></feed>
