[mapguide-users] Mapguide and Maestro
Paulo Veríssimo
pauloverissimo at hotmail.com
Mon Mar 30 12:47:13 EDT 2009
Hi
Here is my short experience with Mapguide Open Souce and Maestro. I found
some problems and some solutions. Perhaps you found the same problems and
perhaps some of my solutions may be helpful to you and I hope some of your's
may help me. I think Its all about coordinate systems.
Software versions:
Autodesk Map 3D 2006
Oracle 11g
Mapguide Open Source 2.0.2
Maestro 1.0.9.23854
SL-King FDO Oracle Provider 0.8.7
Problem 1:
When creating a layer in Maestro pointing to Oracle I can preview the
geometry but when I insert that layer in a map, I can't see anything. I
already tried several coodinate systems but no one works. The Oracle SRID is
82176.
Adding layers from sdf files with coordinate system XY, thay work just fine
<CoordinateSystem>LOCAL_CS["Non-Earth (Meter)",LOCAL_DATUM["Local
Datum",0],UNIT["Meter",
1],AXIS["X",EAST],AXIS["Y",NORTH]]</CoordinateSystem>.
Solution 1:
In Maestro I edited the map xml and deleted the coordinate system, leaving
only the xml tags like this: <CoordinateSystem></CoordinateSystem>
Problem 2:
Can't select any feature from Oracle connections on the map. I can only
select features from sdf files. May be it has something to do with previous
problem.
Solution 2:
not found yet.
Problem 3:
Creating a raster layer in Maestro, it doen't recognize the boundaries of
the files. I tried tiff/tfw, jpg/jgw, and ecw/tab files but always got the
extents -10000000,10000000.
Solution 3:
With gdalinfo I produced a list of the correct coordinates and then I
created a config file and uploaded it in Maestro. This works very well but I
got problem 4
Problem 4:
Can't apply solution 3 for a second layer because I get a error message from
Maestro saying that the resource config already exists in the server.
Solution 4:
not found yet.
Here is my batchfile for creating the config file for Maestro:
@echo off
:input
set INPUT=
set /P INPUT=enter folder? %=%
if "%INPUT%"=="" goto input
:gdalinfo
creating file %INPUT%\coords.txt...
if exist %INPUT%\coords.txt del %INPUT%\coords.txt
for /f "tokens=* delims= " %%A in ('dir %INPUT%\*.jpg /b') do (
echo %%~nA.jpg
gdalinfo.exe -nomd %INPUT%\%%~nA.jpg >> %INPUT%\coords.txt
echo ----------------------------------------------- >> %INPUT%\coords.txt
)
:gdal2xml
gdal2xml.exe %INPUT%
set INPUT=
set MILITARES=
And the C# command prompt program that I called gdal2xml.exe for converting
the gdalinfo report coords.tx for Maestro config xml format:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
namespace gdal2xml
{ class Program
{ static void Main(string[] args)
{ if (args.Length < 1)
{ Console.WriteLine("Must enter folder where is coods.txt");
}
else
{ Console.WriteLine("Processing file " + args[0].ToString() +
"\\coords.txt...");
FileStream fileInput = new FileStream(args[0].ToString() +
"\\coords.txt", FileMode.Open, FileAccess.Read);
FileStream fileOutput = new FileStream(args[0].ToString() +
"\\config", FileMode.Create, FileAccess.Write);
String line;
try
{ Console.WriteLine("Creating file " + args[0].ToString()
+ "\\config...");
//Pass the file path and file name to the StreamReader
constructor
StreamReader sr = new StreamReader(fileInput);
//Pass the filepath and filename to the StreamWriter
Constructor
StreamWriter sw = new StreamWriter(fileOutput);
sw.WriteLine("<?xml version=\"1.0\"
encoding=\"utf-8\"?>");
sw.WriteLine("<fdo:DataStore
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns:xlink=\"http://www.w3.org/1999/xlink\"
xmlns:gml=\"http://www.opengis.net/gml\"
xmlns:fdo=\"http://fdo.osgeo.org/schemas\"
xmlns:fds=\"http://fdo.osgeo.org/schemas/fds\">");
sw.WriteLine(" <gml:DerivedCRS gml:id=\"Default\">");
sw.WriteLine(" <gml:metaDataProperty>");
sw.WriteLine(" <gml:GenericMetaData>");
sw.WriteLine("
<fdo:SCExtentType>dynamic</fdo:SCExtentType>");
sw.WriteLine("
<fdo:XYTolerance>0.001000</fdo:XYTolerance>");
sw.WriteLine("
<fdo:ZTolerance>0.001000</fdo:ZTolerance>");
sw.WriteLine(" </gml:GenericMetaData>");
sw.WriteLine(" </gml:metaDataProperty>");
sw.WriteLine(" <gml:remarks>System generated default
FDO Spatial Context</gml:remarks>");
sw.WriteLine(" <gml:srsName>Default</gml:srsName>");
sw.WriteLine(" <gml:validArea>");
sw.WriteLine(" <gml:boundingBox>");
sw.WriteLine("
<gml:pos>-10000000 -10000000</gml:pos>");
sw.WriteLine(" <gml:pos>10000000
10000000</gml:pos>");
sw.WriteLine(" </gml:boundingBox>");
sw.WriteLine(" </gml:validArea>");
sw.WriteLine(" <gml:baseCRS>");
sw.WriteLine(" <fdo:WKTCRS gml:id=\"Default\">");
sw.WriteLine("
<gml:srsName>Default</gml:srsName>");
sw.WriteLine("
<fdo:WKT>LOCAL_CS[\"*XY-MT*\",LOCAL_DATUM[\"*X-Y*\",10000],UNIT[\"Meter\",
1],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]</fdo:WKT>");
sw.WriteLine(" </fdo:WKTCRS>");
sw.WriteLine(" </gml:baseCRS>");
sw.WriteLine(" <gml:definedByConversion
xlink:href=\"http://fdo.osgeo.org/coord_conversions#identity\" />");
sw.WriteLine(" <gml:derivedCRSType
codeSpace=\"http://fdo.osgeo.org/crs_types\">geographic</gml:derivedCRSType>");
sw.WriteLine(" <gml:usesCS
xlink:href=\"http://fdo.osgeo.org/cs#default_cartesian\" />");
sw.WriteLine(" </gml:DerivedCRS>");
sw.WriteLine(" <xs:schema
xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns:fdo=\"http://fdo.osgeo.org/schemas\"
xmlns:gml=\"http://www.opengis.net/gml\"
xmlns:default=\"http://fdo.osgeo.org/schemas/feature/default\"
targetNamespace=\"http://fdo.osgeo.org/schemas/feature/default\"
elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">");
sw.WriteLine(" <xs:annotation>");
sw.WriteLine(" <xs:appinfo
source=\"http://fdo.osgeo.org/schemas\" />");
sw.WriteLine(" </xs:annotation>");
sw.WriteLine(" <xs:element name=\"default\"
type=\"default:defaultType\" abstract=\"false\"
substitutionGroup=\"gml:_Feature\">");
sw.WriteLine(" <xs:key name=\"defaultKey\">");
sw.WriteLine(" <xs:selector xpath=\".//default\"
/>");
sw.WriteLine(" <xs:field xpath=\"FeatId\" />");
sw.WriteLine(" </xs:key>");
sw.WriteLine(" </xs:element>");
sw.WriteLine(" <xs:complexType name=\"defaultType\"
abstract=\"false\" fdo:hasGeometry=\"false\">");
sw.WriteLine(" <xs:annotation>");
sw.WriteLine(" <xs:appinfo
source=\"http://fdo.osgeo.org/schemas\" />");
sw.WriteLine(" </xs:annotation>");
sw.WriteLine(" <xs:complexContent>");
sw.WriteLine(" <xs:extension
base=\"gml:AbstractFeatureType\">");
sw.WriteLine(" <xs:sequence>");
sw.WriteLine(" <xs:element name=\"FeatId\">");
sw.WriteLine(" <xs:annotation>");
sw.WriteLine(" <xs:appinfo
source=\"http://fdo.osgeo.org/schemas\" />");
sw.WriteLine(" </xs:annotation>");
sw.WriteLine(" <xs:simpleType>");
sw.WriteLine(" <xs:restriction
base=\"xs:string\">");
sw.WriteLine(" <xs:maxLength
value=\"256\" />");
sw.WriteLine(" </xs:restriction>");
sw.WriteLine(" </xs:simpleType>");
sw.WriteLine(" </xs:element>");
sw.WriteLine(" <xs:element name=\"Image\"
type=\"fdo:RasterPropertyType\" fdo:defaultImageXSize=\"1024\"
fdo:defaultImageYSize=\"1024\" fdo:srsName=\"Default\">");
sw.WriteLine(" <xs:annotation>");
sw.WriteLine(" <xs:appinfo
source=\"http://fdo.osgeo.org/schemas\">");
sw.WriteLine(" <fdo:DefaultDataModel
dataModelType=\"Bitonal\" dataType=\"Unknown\" organization=\"Pixel\"
bitsPerPixel=\"1\" tileSizeX=\"256\" tileSizeY=\"256\" />");
sw.WriteLine(" </xs:appinfo>");
sw.WriteLine(" </xs:annotation>");
sw.WriteLine(" </xs:element>");
sw.WriteLine(" </xs:sequence>");
sw.WriteLine(" </xs:extension>");
sw.WriteLine(" </xs:complexContent>");
sw.WriteLine(" </xs:complexType>");
sw.WriteLine(" </xs:schema>");
sw.WriteLine(" <SchemaMapping
provider=\"OSGeo.Gdal.3.2\" name=\"default\"
xmlns=\"http://fdogrfp.osgeo.org/schemas\">");
sw.WriteLine(" <complexType name=\"defaultType\">");
sw.WriteLine(" <complexType
name=\"RasterTypeType\">");
sw.WriteLine(" <RasterDefinition
name=\"images\">");
sw.WriteLine(" <Location name=\"" + args[0] +
"\\\">");
int filecounter = 0;
string str = "", MinX = "", MinY = "", MaxX = "", MaxY =
"";
//Read the first line of text
line = sr.ReadLine();
//Continue to read until you reach end of file
while (line != null)
{ //Read the next line
line = sr.ReadLine();
if (line != null)
{ if (line.Contains("Files:"))
{ str = line.Substring(line.LastIndexOf("\\")
+ 1, line.LastIndexOf(".") - line.LastIndexOf("\\") - 1);
sw.WriteLine(" <Feature name=\""
+ str + "\">");
sw.WriteLine(" <Band
name=\"RGB\" number=\"1\">");
sw.WriteLine(" <Image
frame=\"1\" name=\"" + str + ".jpg\">");
sw.WriteLine(" <Bounds>");
}
else if (line.Contains("Upper Left"))
{ MinX = line.Substring(line.LastIndexOf("(")
+ 1, line.LastIndexOf(",") - line.LastIndexOf("(") - 1).Trim();
//Console.WriteLine("MinX=" + MinX);
MaxY = line.Substring(line.LastIndexOf(",")
+ 1, line.LastIndexOf(")") - line.LastIndexOf(",") - 1).Trim();
//Console.WriteLine("MaxY=" + MaxY);
}
else if (line.Contains("Lower Right"))
{ MaxX = line.Substring(line.LastIndexOf("(")
+ 1, line.LastIndexOf(",") - line.LastIndexOf("(") - 1).Trim();
//Console.WriteLine("MaxX=" + MaxX);
MinY = line.Substring(line.LastIndexOf(",")
+ 1, line.LastIndexOf(")") - line.LastIndexOf(",") - 1).Trim();
//Console.WriteLine("MinY=" + MinY);
sw.WriteLine(" <MinX>" +
MinX + "</MinX>");
sw.WriteLine(" <MinY>" +
MinY + "</MinY>");
sw.WriteLine(" <MaxX>" +
MaxX + "</MaxX>");
sw.WriteLine(" <MaxY>" +
MaxY + "</MaxY>");
sw.WriteLine(" </Bounds>");
sw.WriteLine(" </Image>");
sw.WriteLine(" </Band>");
sw.WriteLine(" </Feature>");
}
filecounter++;
}
}
sw.WriteLine(" </Location>");
sw.WriteLine(" </RasterDefinition>");
sw.WriteLine(" </complexType>");
sw.WriteLine(" </complexType>");
sw.WriteLine(" </SchemaMapping>");
sw.Write("</fdo:DataStore>");
//Close the files
sr.Close();
sw.Close();
Console.WriteLine("Completed! Correct line 72 with
correct server path: <Location name=\"" + args[0] + "\"\\>");
}
catch (Exception e)
{ Console.WriteLine("Exception: " + e.Message);
}
finally
{ //Console.WriteLine("Executing finally block.");
}
fileInput.Close();
fileOutput.Close();
}
}
}
}
More information about the mapguide-users
mailing list