从ArcGIS拱廊交叉返回值,并在一个表中搜索返回值

1411
5
跳到解决方案
06-14-2021 02:21 am
通过 匿名用户
不适用

你好:

我需要帮助创建一个ArcGIS街机弹出表达式,将相交并返回在我的包裹层中任何给定包裹中发现的所有地址点。然后我想看看这些相交的地址点也在一个单独的平面表也在我的网络地图。如果是的话,我想显示该表中某个字段的值(Path字段)。我想通过使用FullAddress字段处理已经返回交叉值的现有表达式来创建新表达式。我需要的帮助是确定这些在地址点层的FullAddress字段相交的值是否也在表中的FullAddress字段,然后显示在路径字段的值,如果是的话。我的表格在地图上,叫做PDF档案:https://lacounty.maps.arcgis.com/apps/webappviewer/index.html?id=4cf18bf143c049ef84a173672e089e48

现有表达式如下。你可以点击网络地图上的任何一个包裹,看看它是如何工作的。

var addresspoints = Intersects($feature, FeatureSetByName($map,"Addresses (GIS)", ["FullAddress"]));var cnt = Count(地址点);var counter = (cnt-(cnt - 1)) var address_info = "";//验证是否有任何交叉记录,并相应处理if (cnt > 0){//至少有一个交叉记录,创建地址信息address_info = cnt + "地址(es):";//循环(var address in addresspoints)的交叉记录{//使用名称和描述创建文本var address_text = (counter++) + "。+ address.FullAddress;//将该地址的文本添加到地址信息address_info += TextFormatting。NewLine + address_text;}} else{//没有交叉记录address_info = "未找到此包裹的地址";}return address_info;

任何帮助都将不胜感激。

标签(5)
0荣誉
1解决方案

接受的解决方案
JohannesLindner
常规赛MVP

像这样的东西?

var addresspoints = Intersects($feature, FeatureSetByName($map,"Addresses (GIS)", ["FullAddress"]));var cnt = Count(地址点);如果(cnt == 0) {return "No addresses found for this parcel"} //加载pdf表。你至少需要Path字段和链接这个表到你的地址点的字段。我在这里使用了FullAddress,如果它是//一些其他字段,你也必须在地址点中包含它。var pdf_table = FeatureSetByName($map, "PDF", ["FullAddress", "Path"]) address_info = cnt + " Address(es):";For (var address in addresspots){//过滤你的PDF表var key = address。FullAddress //或在这里使用您的关键字段var pdf_row = First(Filter(pdf_table, "FullAddress = @key")) //或在这里使用您的关键字段//如果找到pdf,显示完整地址var pdf_path = "" if(!(pdf_row == null || IsEmpty(pdf_row))) {pdf_path = ";PDF: + pdf_row。路径}var address_text = (counter++) + "。 " + address.FullAddress + pdf_path address_info += TextFormatting.NewLine + address_text; } return address_info;

祝你有愉快的一天!
约翰内斯

在原帖子中查看解决方案

5回复
JohannesLindner
常规赛MVP

像这样的东西?

var addresspoints = Intersects($feature, FeatureSetByName($map,"Addresses (GIS)", ["FullAddress"]));var cnt = Count(地址点);如果(cnt == 0) {return "No addresses found for this parcel"} //加载pdf表。你至少需要Path字段和链接这个表到你的地址点的字段。我在这里使用了FullAddress,如果它是//一些其他字段,你也必须在地址点中包含它。var pdf_table = FeatureSetByName($map, "PDF", ["FullAddress", "Path"]) address_info = cnt + " Address(es):";For (var address in addresspots){//过滤你的PDF表var key = address。FullAddress //或在这里使用您的关键字段var pdf_row = First(Filter(pdf_table, "FullAddress = @key")) //或在这里使用您的关键字段//如果找到pdf,显示完整地址var pdf_path = "" if(!(pdf_row == null || IsEmpty(pdf_row))) {pdf_path = ";PDF: + pdf_row。路径}var address_text = (counter++) + "。 " + address.FullAddress + pdf_path address_info += TextFormatting.NewLine + address_text; } return address_info;

祝你有愉快的一天!
约翰内斯
通过 匿名用户
不适用

你好约翰:

这看起来不错,但是否有其他方法来获取表中的值,而不是一个相关?比如搜索或寻找?相关需要更长的时间,我不认为这是必要的,因为在表中搜索的具体值已经使用相交提供。我确实在街机的文档中发现了一个“查找功能”,尽管我不确定它是如何实现的,或者它是否可以这样使用。你的任何见解都很好。

brandonprice2_0 - 1623909476019. - png

0荣誉
JohannesLindner
常规赛MVP

如果我正确理解您的问题,您有3个表/特性类:包、地址点和一个包含pdf路径的独立表。如果这是正确的,那么我张贴的代码是这样做的方式。

如果你能把pdf路径放到地址点(连接)中,这将会更容易:

var addresspoints = Intersects($feature, FeatureSetByName($map,"Addresses (GIS)", ["FullAddress", "PdfPath"]));var cnt = Count(地址点);var counter = (cnt-(cnt - 1)) if(cnt == 0){返回"未找到此包裹的地址"}address_info = cnt + "地址(es):";if(!IsEmpty(address. pdfpath)) {pdf_path = ";PDF:“+地址。PdfPath} var address_text = (counter++) + "。+地址。FullAddress + pdf_path address_info += TextFormatting。NewLine + address_text;}返回地址信息;

Find用于查找字符串中的子字符串。它对功能集没有帮助。


祝你有愉快的一天!
约翰内斯
0荣誉
通过 匿名用户
不适用

你好约翰:

关联可以代替连接吗?我在一个发布的服务中有地址和pdf表。

0荣誉
JohannesLindner
常规赛MVP

要在不进行另一次搜索的情况下获得pdf路径,它必须在同一个表中,因此要加入。

如果AddressPoints和PDF由一个关系类关联,你可以尝试FeatureSetByRelationshipName,也许它更快:

address_info = cnt + "地址(es):";for (var address in addresspoints){//过滤你的pdf表var pdf_row = First(FeatureSetByRelationshipName(address, "RelationshipName", ["Path"]) //如果找到pdf,显示完整地址后的路径var pdf_path = "" if(!(pdf_row == null || IsEmpty(pdf_row))) {pdf_path = ";PDF: + pdf_row。路径}var address_text = (counter++) + "。+地址。FullAddress + pdf_path address_info += TextFormatting。NewLine + address_text;}


祝你有愉快的一天!
约翰内斯
0荣誉