Lets say i have selected an area and in the area that i selected there are pushpins. Is there anyway of finding out the pushpins that reside in that area through code.
This is a discussion on Selected Area within the MapPoint Desktop Discussion forums, part of the Map Forums category; Lets say i have selected an area and in the area that i selected there are pushpins. Is there anyway ...
Lets say i have selected an area and in the area that i selected there are pushpins. Is there anyway of finding out the pushpins that reside in that area through code.
No.. as you're probably aware, working interactively you can do it with right-click / Export to Excel.. MapPoint does not offer this programmatically. If you're ambitious, you could export the polygon and points ( http://www.mp2kmag.com/importersub01.asp ) for processing in a GIS or your own alghorithm ( search for the for "point-in-polygon alghorithm ).
~ Order MapPoint MapPoint 2013 Here and Get Free Access to the MapForums Downloads ~
~~
~ Upgrade to Get Access to the MapForums Downloads ~
Give this a try, I think it will do what your asking. I'm just counting the number of pushpins in the selected area (the rectangle made when holding the left mouse button and dragging) but you could get there name/location or whatever you need.. BTW, If you did not select an area it will just exit sub.
Private Sub Command1_Click()
On Error GoTo error:
Dim objmap As MapPointctl.Map
Set objmap = MappointControl1.ActiveMap
Dim sa As MapPointctl.SelectedArea
Set sa = objmap.SelectedArea
Dim objDataSet As MapPointctl.DataSet
Dim objRecords As MapPointctl.Recordset
Dim objLocs(1 To 5) As MapPoint.Location
Set objLocs(1) = objmap.XYToLocation(sa.Left, sa.Top)
Set objLocs(2) = objmap.XYToLocation(sa.Left + sa.Width, sa.Top)
Set objLocs(3) = objmap.XYToLocation(sa.Left + sa.Width, sa.Top + sa.Height)
Set objLocs(4) = objmap.XYToLocation(sa.Left, sa.Top + sa.Height)
Set objLocs(5) = objmap.XYToLocation(sa.Left, sa.Top)
'Remove the comment from the next line to see the polygon being queried
'objmap.Shapes.AddPolyline objLocs
lngCount = 0
For Each objDataSet In objmap.DataSets
Set objRecords = objDataSet.QueryPolygon(objLocs)
objRecords.MoveFirst
Do While Not objRecords.EOF
lngCount = lngCount + 1
objRecords.MoveNext
Loop
Next
MsgBox "Number of records in polygon: " & lngCount
Exit Sub
error:
MsgBox Err.Description
End Sub
John
http://www.support-pc.com
Order MapPoint 2006 Here
https://secure.mp2kmag.com/?refer=support-PC
John,
I was playing with something like the code below and sometimes all the records fall in and sometimes i lose one or two points but your solution seems to work better so thank you.
P.S.
i wouldn't mind if you tell me why my code lost those points.
Dim objshape As MapPoint.Shape
Set objshape = objMap.Shapes.AddShape(geoShapeRectangle, objMap.SelectedArea.Location, objMap.SelectedArea.Width / 100, objMap.SelectedArea.Height / 100)
objshape.Select
For Each objDataSet In objMap.DataSets
If InStr(objDataSet.Name, "My Pushpins") Then
Set objRecordset = objDataSet.QueryShape(objshape)
Do Until objRecordset.EOF
objRecordset.Pushpin.Highlight = True
objRecordset.MoveNext
Loop
End If
Next
objshape.Delete
Amanuel,
Your welcome. One thing my code does it check every dataset. Your code has the if statment so only looks at the "My Pushpins" dataset. If you have more than one dataset, that could explain it.
Another thing you could try is run both peices of code but don't delete the shapes, see if they are covering different locations?
John
http://www.support-pc.com
Order MapPoint 2006 Here
https://secure.mp2kmag.com/?refer=support-PC
Note: formatting is not displaying as I enter it. Replaced quote marks with [Quote mark here] and hard returns with lines of dashes.
----------------------------------------
I had occasion to read this thread today, years later, and found it helpful. I worked around the export problem a little differently. Information a pushpin carries can be read & written to a text file as you iterate through the pushpins contained in the shape, as follows:
---------------------------------------- Set objFileSystem = CreateObject([Quote mark here]Scripting.FileSystemObject[Quote mark here])
--------------------strPathName = [Quote mark here]C:\X drive alexa-win98\My Documents\Databases\Murders\OutFiles\SeventhWardMu rdersList[Quote mark here] & strToday & [Quote mark here].txt[Quote mark here]
--------------------Set objOutFile = objFileSystem.CreateTextFile(strPathName, True)
--------------------Set objRecordset = objMap.DataSets([Quote mark here]My Pushpins[Quote mark here]).QueryPolygon(objLocs)
--------------------objRecordset.MoveFirst
--------------------Do While Not objRecordset.EOF
--------------------strNote = CStr(objRecordset.Pushpin.Note)
--------------------strStreetAddress = CStr(objRecordset.Pushpin.Location.StreetAddress)
--------------------strWriteLine = strNote & Chr(35) & strStreetAddress
--------------------objOutFile.WriteLine strWriteLine
--------------------objRecordset.MoveNext
--------------------Loop
--------------------objOutFile.Close
----------------------------------------What I end up with is a text file containing lines like this:
---------------------------------------- Name_Date [which is my pushpin note text]#StreetAddress, City, State, Zip [which is the objRecordset.Pushpin.Location.StreetAddress text]
---------------------------------------- and it's formatted like the .csv export file I ended up with when I did the process by hand. I used the pound sign as a delimiter, since there are commas in the address. It's not the same as being able to do the real export in code, of course, but you get almost the same result.
Last edited by Eric Frost; 10-13-2010 at 06:25 AM. Reason: Hard returns not displayed
There are currently 1 users browsing this thread. (0 members and 1 guests)