C# Mapscript queryByPoint不返回任何结果
我使用c#mapscript创建了一个动态生成的映射文件,其定义如下:C# Mapscript queryByPoint不返回任何结果,c#,mapserver,C#,Mapserver,我使用c#mapscript创建了一个动态生成的映射文件,其定义如下: MAP EXTENT 5.91828 45.63552 5.92346 45.65051 IMAGECOLOR 192 192 192 IMAGETYPE png SIZE 256 256 STATUS ON TRANSPARENT TRUE UNITS METERS NAME "GMAP_TILE" OUTPUTFORMAT NAME "png" MIMETYPE "i
MAP
EXTENT 5.91828 45.63552 5.92346 45.65051
IMAGECOLOR 192 192 192
IMAGETYPE png
SIZE 256 256
STATUS ON
TRANSPARENT TRUE
UNITS METERS
NAME "GMAP_TILE"
OUTPUTFORMAT
NAME "png"
MIMETYPE "image/png"
DRIVER "GD/PNG"
EXTENSION "png"
IMAGEMODE "PC256"
TRANSPARENT TRUE
END
SYMBOL
NAME "circle"
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END
SYMBOL
NAME ">"
TYPE TRUETYPE
ANTIALIAS TRUE
CHARACTER ">"
GAP -20
FONT "arial"
POSITION CC
END
PROJECTION
"proj=merc"
"a=6378137"
"b=6378137"
"lat_ts=0.0"
"lon_0=0.0"
"x_0=0.0"
"y_0=0"
"units=m"
"k=1.0"
"nadgrids=@null"
END
LEGEND
IMAGECOLOR 255 255 255
KEYSIZE 20 10
KEYSPACING 5 5
LABEL
SIZE MEDIUM
TYPE BITMAP
BUFFER 0
COLOR 0 0 0
FORCE FALSE
MINDISTANCE -1
MINFEATURESIZE -1
OFFSET 0 0
PARTIALS TRUE
END
POSITION LL
STATUS OFF
END
QUERYMAP
COLOR 255 255 0
SIZE -1 -1
STATUS ON
STYLE HILITE
END
SCALEBAR
ALIGN CENTER
COLOR 0 0 0
IMAGECOLOR 255 255 255
INTERVALS 4
LABEL
SIZE MEDIUM
TYPE BITMAP
BUFFER 0
COLOR 0 0 0
FORCE FALSE
MINDISTANCE -1
MINFEATURESIZE -1
OFFSET 0 0
PARTIALS TRUE
END
POSITION LL
SIZE 200 3
STATUS OFF
STYLE 0
UNITS MILES
END
WEB
IMAGEPATH ""
IMAGEURL ""
QUERYFORMAT text/html
LEGENDFORMAT text/html
BROWSEFORMAT text/html
END
LAYER
NAME "Troncons"
PROJECTION
"proj=longlat"
"ellps=WGS84"
"datum=WGS84"
END
STATUS DEFAULT
TEMPLATE "nofile.html"
TOLERANCE 100
TOLERANCEUNITS METERS
TYPE LINE
UNITS METERS
CLASS
NAME "Troncons"
STYLE
ANGLE 360
COLOR 0 0 255
SIZE 5
SYMBOL "circle"
WIDTH 5
END
STYLE
ANGLE 360
COLOR 0 0 0
SIZE 12
SYMBOL ">"
WIDTH 1
END
END
FEATURE
POINTS
5.91828 45.63552
5.91876 45.63611
5.91898 45.6364
5.91936 45.63701
5.91952 45.63731
5.91968 45.63762
5.91993 45.63825
5.92003 45.63856
5.92018 45.63919
5.92028 45.63983
5.92031 45.64014
5.92033 45.64046
5.92034 45.64077
5.92034 45.64108
5.92034 45.64171
5.92035 45.64234
5.92035 45.6428
5.92037 45.6433
5.9204 45.64394
5.92046 45.64458
5.92056 45.64522
5.92062 45.64554
5.92069 45.64586
5.92077 45.64617
5.92097 45.64679
5.92122 45.64739
5.92136 45.64769
5.92169 45.64828
5.92207 45.64886
5.92228 45.64914
5.92272 45.64969
5.92321 45.65023
5.92346 45.65051
END
END
END
END
我试图通过查询点来检索所选形状的索引。在下面的代码中,我使用固定点而不是参数传递的点创建了一个特定的测试函数,因此我确信我使用的点实际上是特性的一部分。在我的例子中,我使用mapfile中包含的唯一功能的第一个点
public string GetTronconId()
{
//_map is my dynamically created mapObj
if (_map != null)
for (int i = 0; i < _map.numlayers; i++)
{
layerObj layer = _map.getLayer(i);
// Code never pass this point
if (layer.queryByPoint(_map, new pointObj(5.91898, 45.6364, 0, 0), (int) MS_QUERY_MODE.MS_QUERY_MULTIPLE, 100) == (int) MS_RETURN_VALUE.MS_SUCCESS)
{
int numresults = layer.getNumResults();
if (numresults != 0)
{
layer.open();
for (int j = 0; j < numresults; j++)
{
resultCacheMemberObj resultat = layer.getResult(j);
shapeObj shape = null;
if (layer.getShape(shape, resultat.tileindex, resultat.shapeindex) == (int) MS_RETURN_VALUE.MS_SUCCESS)
return shape.getValue(0);
}
}
}
}
return null;
}
公共字符串gettroncoid()
{
//_map是我动态创建的mapObj
如果(_map!=null)
对于(int i=0;i<\u map.numlayers;i++)
{
layerObj layer=_map.getLayer(i);
//代码永远不会通过这一点
如果(layer.queryByPoint(_map,new pointObj(5.91898,45.6364,0,0),(int)MS_QUERY_MODE.MS_QUERY_multiplex,100)=(int)MS_RETURN_VALUE.MS_SUCCESS)
{
int numresults=layer.getNumResults();
如果(numresults!=0)
{
layer.open();
对于(int j=0;j
我有一个虚拟模板集,我不必使用公差,因为点直接位于形状中,但QueryPoint会不断返回MS_FAILURE。从我在网上的搜索来看,一切似乎都很好。有什么想法吗?你的图层有投影lonlat,但单位是米。将其从图层中删除或更改为DD。好的,第二次尝试:querybypoint函数需要地图投影中的查询点,而不是图层投影中的查询点。我认为必须先打开图层,然后才能从中获取要素: open():void 打开底层。在执行以下操作之前需要执行此操作: getFeature()可以工作,但不可用 在绘图或查询调用之前需要
Mapscript自动将单位设置为米,因此我无法删除它,但我已尝试使用DD并获得相同的结果。谢谢你的尝试。事实上,我在getFeature()之前就卡住了。正是这个查询造成了问题,doc声明在进行绘图或查询时不需要打开()。谢谢你的尝试。我对这个很困惑。我的范围是我在拉丁语中的行的边界。我的观点是用latlng表示的,我的查询要求一个latlng作为行的一部分。为什么要转换查询中传递的点?另外,我将WGS84点传递给查询,投影为WGS84。只有一个地图是墨卡托。尽管在mapscript语法中在特定层上调用,但查询是在整个地图上完成的。地图的输出投影确定了用于解释查询的坐标系。您可以使用mapscript投影对象对查询点进行转换。正确,我必须将我的点传递到projectionObj,以将其放入地图投影而不是图层投影,即使我在图层上进行查询。奇怪,但它是有效的。谢谢