I didn't read your whole mail, but short answer is that I suspect you
are overlooking the fact that in GetFeatureInfo, the X and Y coordinates
are in pixels within the view of the map (which is 500x500 pixels in
your example).
So when you write x=0y=0 that refers to the top-left corner of the map
view, and not the 0,0 of the SRS coordinate system... which corresponds
to longitude=-10, and latitude=+10. Actually, the x,y value is
translated to be the center of the top-left pixel (and not its top-left
boundary), which explains why you get lon,lat=9.98,9.98 in the query.
Daniel
On 12-06-22 5:40 PM, Anzel, Phil - NRCS, Fort Collins, CO wrote:
All,
Does GetFeatureInfo have a coordinate translation problem?
Consider the WMS request shown here (ignore line wrapping):
http://localhost/mapserver/mapserv.exe
?map=m01.map
SERVICE=WMS
VERSION=1.1.1
REQUEST=GetFeatureInfo
LAYERS=External
QUERY_LAYERS=External
INFO_FORMAT=text/plain
x=0.0y=0.0
SRS=EPSG:4326
BBOX=-10,-10,10,10
width=500height=500
In the mapfile below, all coordinate system references are to 4326. Forcing
an error in the DATA statement makes me think the (0,0) coordinate pair is mistranslated,
as shown by the message below which includes:
shape_BOGUS.STIntersects(
geometry::STGeomFromText('POINT(-9.98 9.98)',4326)) = 1
Is there a problem with my request or with my mapfile?
Following is the mapfile and some experiments that I performed. I'm using
MapServer 6.1-DEV with Sql Server 2008 under Windows XP.
The relevant mapfile is defined as:
map
name m01
status on
size 500 500
extent -20 -20 20 20
units dd
imagecolor 255 255 255
projection init=epsg:4326 end
web
imagepath c:\ms4w\tmp\ms_tmp
imageurl /ms_tmp/
metadata
wms_title test-title
wms_extent-180 -90 180 90
wms_srs EPSG:4326
ows_enable_requestGetCapabilities GetMap GetFeature
GetFeatureInfo
end
end
layer
name External
type polygon
status on
metadata
wms_title External
wms_extent-180 -90 180 90
wms_srs EPSG:4326
ows_include_items all
wms_include_items all
gml_include_items all
gml_geometriesmultiPolygon
gml_multiPolygon_type multipolygon
end
dump true
header C:\ms4w\Apache\cgi-bin\m01_header.htm
template C:\ms4w\Apache\cgi-bin\m01_template.html
footer C:\ms4w\Apache\cgi-bin\m01_footer.html
projection init=epsg:4326 end
units dd
# ExternalData table created and populated in Sql Server 2008 with:
# create table ExternalData
# (ID varchar(10) primary key, shape Geometry not null);
# insert into ExternalData (id, shape) values ('x102',
# geometry::STGeomFromText('polygon((-20 -20,-20 20,20 20,20 -20,-20
-20))', 4326))
connection server=...;database=test;uid=...;pwd=...
connectiontype plugin
plugin C:/ms4w/Apache/specialplugins/msplugin_mssql2008.dll
data shape from dbo.ExternalData using unique ID using srid=4326
labelitem ID
class
name ExternalClass
style color 255 0 0 outlinecolor 0 255 0 end
label position auto size small color 0 0 0 end
end
end
end
Note that the WMS request, the MAP and the LAYER are all defined with the
4326 projection.
If I change the DATA statement to force an error,
data shape_BOGUS from dbo.ExternalData using unique ID using srid=4326
the error returned shows:
msMSSQL2008LayerGetShape(): Query error.
Error executing MSSQL2008 SQL statement:
SELECT
convert(varchar(max), id),
shape_BOGUS.STAsBinary(),
convert(varchar(36), ID)
from dbo.ExternalData
WHERE shape_BOGUS.STIntersects(
geometry::STGeomFromText('POINT(-9.98 9.98)',4326)) = 1
Please note that the POINT location should be (0,0). Why isn't it?
A similar problem occurs if the feature is defined inline as described below.
Some additional details:
1. If I remove the _BOGUS, a result is returned. Therefore I believe that the
mapfile is well-formed.
2. With _BOGUS removed, and the polygon redefined in the database as
POLYGON((-5 -5,-5 5,5 5,5 -5,-5 -5)), no result is returned. Therefore I believe that the
bad coordinates in the query are being used.
3. If I define and use an Internal layer:
layer
name Internal
type polygon
status on
metadata
wms_title Internal
wms_extent-180 -90 180 90
wms_srs EPSG:4326
ows_include_items all
wms_include_items all
gml_include_items all
gml_geometriesmultiPolygon
gml_multiPolygon_type multipolygon
end
dump true
header C:\ms4w\Apache\cgi-bin\m01_header.htm
template