PDA

View Full Version : Selected Area



amanuel
08-21-2002, 12:23 PM
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.

Eric Frost
08-21-2002, 02:32 PM
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 ).

John Meyer
08-21-2002, 07:00 PM
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

amanuel
08-22-2002, 10:38 AM
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

John Meyer
08-22-2002, 01:23 PM
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?

muspench
10-12-2010, 06:55 PM
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.